正则表达式,使用JavaScript进行准确的字数统计

木川 *_* 炎星 14 javascript regex word-count

我正在尝试为JavaScript命令组合一个正则表达式,以准确计算textarea中的单词数.

我发现的一个解决方案如下:

document.querySelector("#wordcount").innerHTML = document.querySelector("#editor").value.split(/\b\w+\b/).length -1;
Run Code Online (Sandbox Code Playgroud)

但这不算任何非拉丁字符(例如:西里尔字母,韩文字母等); 它完全跳过它们.

我放在一起的另一个:

document.querySelector("#wordcount").innerHTML = document.querySelector("#editor").value.split(/\s+/g).length -1;
Run Code Online (Sandbox Code Playgroud)

但是,除非文档以空格字符结尾,否则这不会准确计算.如果空格字符附加到计数值,即使空文档也计算1个单词.此外,如果文档以空格字符开头,则计算无关的单词.

是否有正则表达式,我可以在此命令中准确计算单词,无论输入方法如何?

Dav*_*ang 36

这应该做你想要的:

value.match(/\S+/g).length;
Run Code Online (Sandbox Code Playgroud)

您可以匹配任何非空白字符序列,而不是拆分字符串.

如果需要,还可以轻松提取每个单词;)

  • `[^\s] +`==`\ S +`;-) (9认同)
  • 我想知道OP如何将"你和我"视为一个词,或者"你和我"被视为三个词或"你 - 我"被视为四个字. (8认同)

mor*_*rja 7

尝试计算任何不是空格和字边界的东西:

value.split(/\b\S+\b/g).length
Run Code Online (Sandbox Code Playgroud)

您也可以尝试使用unicode范围,但我不确定以下是否完整:

value.split(/[\u0080-\uFFFF\w]+/g).length
Run Code Online (Sandbox Code Playgroud)

  • `value.split`是错误的方法,但是如果你改为`(value.match(/\b\S +\b/g)|| []).length`这个效果很好.我发现Phrogz在接受的答案上的例子是一个有用的测试; 这给出:`count("你和我")== 1`,`count("你和我")== 2`,`count("你 - 我")== 3`,`count ("Phrogz的例子")== 2`.唯一值得怀疑的是"你和我",但这种结构很少见,额外的复杂性可能不值得,特别是为了确保你的所有权得到正确. (3认同)