javascript - 如何计算javascript中字符串中的原始字符?

标签 javascript

我正在尝试计算字符串中的实际字符数,而不考虑它们的含义。 例如,\n我想计算斜杠( \n )== 2 个字符而不是 <EOL> = 1

所以像 a\nb 这样的字符串将等于 4而不是 3

详情 (一)\n

var a = `a
b`;

console.log(a.length)
>>> 3

但是在 python 中

>>> a = r'a\nb'
>>> len(a)
4

(2) 智能引号 Javascript

var a = 'a“b';
console.log(a.length);
>>> 3

python

>>> b = 'a“b'
>>> len(b)
5

我已经尝试了很多功能(比如将字符串分解为数组,但是 \n 在一个单元格中)

有什么想法吗?

最佳答案

好吧,我试着在评论中回答,但读起来并不愉快。

这个问题分为两个主要问题:

  • 计算原始字符数
  • 计算 ASCII 长度而不是 UTF-16 长度

我将通过示例回答这两个问题。

计算原始字符数

将 '\n' 字符串视为带有一个反斜杠和一个 n 字母的两个字符的唯一方法是使用函数标记和 template literal .

const rawlength = tpl => tpl.raw.join('').length;

`a\nb`.length;   // 3
rawlength`a\nb`; // 4

您可以复制并粘贴上面的代码并读取两个不同的结果。请记住,在 rawlength 中不使用括号不是拼写错误,而是模板文字的工作方式。

如果您使用像下面这样的模板字面量,请记住

`a
b`

它的长度仍然是 3,因为那里确实没有反斜杠,所以 \n 字符应该被认为是一个字符。

在 Python 中,这将是等价的

len("""a
b""")

那是 3。

编辑:JavaScript 中的 Python r

JavaScript 中 r 的等价物是:

const r = (t, ...v) => {
  const result = [t.raw[0]];
  const length = t.length;
  for (let i = 1; i < length; i++)
    result.push(v[i - 1], t.raw[i]);
  return result.join('');
};

这样:

r`a\nb`

会产生你所期望的。

您可以在 result.join('') 周围添加以下技巧,使长度也改为 ASCII/字节。

计算 ASCII 长度而不是 UTF-16 长度

这是一个总是计算字节数的老技巧:

unescape(encodeURIComponent('a“b')).length;

那是一个 5,因为 encodeURIComponent 会返回文本的 UTF-8 url 友好版本,而 unescape 会创建一个字符遇到的每个 %XX

在这种情况下,'a“b' 变为 a%E2%80%9Cb,即 ab 加上 3 个 url 编码字符。

关于javascript - 如何计算javascript中字符串中的原始字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52539453/

相关文章:

javascript - 如何使用ajax向PHP发送多个数据?

javascript - Django + Jquery

javascript - 另一个变量中的 JS 变量

javascript - 如果我想将 React 组件的函数作为属性传递下来,那么包装它有什么意义呢?

javascript - IE7 中的 window.location.hash 问题

javascript - 来自构造函数的 HTML 元素标签名称

javascript - node.js + pm2 -- 根据环境配置node_args

javascript - 如何使用 jQuery 捕获 altKey + i、u、e、n?

javascript - 使用 jQuery 更新 div 未显示在 DOM 上

javascript - 如何在Bootstrap中为*独立*几个进度条部分设置动画?