我有一个单词计数器功能,但它不考虑使用不良标点符号的人,例如:
“你好世界”
那只会算作1个字。相反,它应该算作 2 个单词。这就是我使用这个 RegEx 的原因;
negWords.replace(/[,.!?;\s]+/g,' ');
这很好用,但如果人们使用双倍空格或标点符号,它也算作一个词;
'你好,'算2个字,
但它不会将更多的出现次数计为超过 1 个单词。
'你好,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, '仍然算2个字。
编辑以获取更多上下文。
我有一个单词计数器功能,但它不考虑使用不良标点符号的人,例如:
“你好世界”
那只会算作1个字。相反,它应该算作 2 个单词。这就是我使用这个 RegEx 的原因;
negWords.replace(/[,.!?;\s]+/g,' ');
这很好用,但如果人们使用双倍空格或标点符号,它也算作一个词;
'你好,'算2个字,
但它不会将更多的出现次数计为超过 1 个单词。
'你好,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, '仍然算2个字。
编辑以获取更多上下文。
要从文本中获取单词,您可以执行
var words = text.split(/\W+/).filter(Boolean);
并且计数是words.length。
这里filter(Boolean)调用从数组中删除空字符串。
该+符号表示它应该接受组中的每个字符中的一个或多个。如果你只想要一个,那么你需要删除+.
negWords.replace(/[,.!?;\s]/g,' ');
如果您想捕捉一个标点符号或空格后跟任意数量的空格,请尝试以下操作:
negWords.replace(/[,.!?;\s]\s*/g,' ');