17

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

我找到的一种解决方案如下:

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

但这不包括任何非拉丁字符(例如:西里尔文、韩文等);它完全跳过它们。

我整理的另一个:

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

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

无论输入法如何,我都可以在这个命令中输入一个可以准确计算单词的正则表达式吗?

4

8 回答 8

41

这应该做你所追求的:

value.match(/\S+/g).length;

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

如果需要,可以轻松提取每个单词还有额外的好处;)

于 2011-01-04T12:37:08.030 回答
7

尝试计算任何不是空格且带有单词边界的内容:

value.split(/\b\S+\b/g).length

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

value.split(/[\u0080-\uFFFF\w]+/g).length
于 2011-01-04T12:35:37.510 回答
4

对我来说,这给出了最好的结果:

value.split(/\b\W+\b/).length

var words = value.split(/\b\W+\b/)

你得到所有的话。

解释:

  • \b 是单词边界
  • \W 是一个非单词字符,大写通常表示否定
  • '+' 表示 1 个或多个字符或前缀字符类

我建议学习正则表达式。这是一项很棒的技能,因为它们非常强大。;-)

于 2015-04-09T05:32:33.400 回答
3

尝试

    value.match(/\w+/g).length;

这将匹配一个可以在单词中的字符串。而像:

    value.match(/\S+/g).length;

如果用户添加逗号或其他不带空格的标点符号 - 或在逗号的任一侧添加带有空格的逗号,将导致计数不正确。

于 2013-11-28T00:53:54.637 回答
2

正确的正则表达式是/s+/为了丢弃非单词:

'Lorem ipsum dolor , sit amet'.split(/\S+/g).length
7
'Lorem ipsum dolor , sit amet'.split(/\s+/g).length
6
于 2011-01-04T13:59:57.930 回答
1

你可以像这样扩展/改变你的方法

document.querySelector("#wordcount").innerHTML = document.querySelector("#editor").value.split(/\b\(.*?)\b/).length -1;如果您还想匹配电子邮件地址等内容

document.querySelector("#wordcount").innerHTML = document.querySelector("#editor").value.trim().split(/\s+/g).length -1;

也尝试将\s\w用作 unicode

来源:http://www.regular-expressions.info/charclass.html

于 2011-01-04T12:38:20.500 回答
0

我的简单JavaScript 库,名为 FuncJS 有一个名为“count()”的函数,它完全按照它的名字来做——计算单词。

例如,假设您有一个充满单词的字符串,您可以简单地将其放在函数括号之间,如下所示:

count("How many words are in this string?");

然后调用该函数,该函数将返回单词数。此外,此函数旨在忽略任何数量的空白,从而给出准确的结果。

要了解有关此功能的更多信息,请阅读http://docs.funcjs.webege.com/count().html上的文档,并且该页面上还有 FuncJS 的下载链接。

希望这可以帮助任何想要这样做的人!:)

于 2012-11-26T18:36:01.167 回答
0
const wordsCount = str.match(/\p{L}+/gu).length
于 2022-01-13T19:16:01.370 回答