如何使用正则表达式计算textarea中的单词和数字?

时间:2014-01-24 10:15:03

标签: javascript php regex

我在正则表达式上有问题,就像我正在尝试计算文本区域中的单词数量但我没有获得所需的输出。主要的问题是,它不计算数字,例如“Hello world 123”它只计数2.而对于“123”它根本不计算。我的正则表达式为response.trim().replace(/\b[\s,-:;'"_]*\b/gi, ' ').split(' ');

5 个答案:

答案 0 :(得分:1)

您应该使用/\b|\d+/gi搜索字边界数字,然后计算数组中元素的数量。

var array = response.trim().match(/\b|\d+/gi);
var count = array.length;

答案 1 :(得分:0)

正如您使用php标记了这一点,我认为PHP答案是可以接受的,在这种情况下,您不需要正则表达式。您可以使用str_word_count

echo str_word_count("Hello world 123!", 0, '0..9'); // 3

注意第三个参数,它允许您指定构成单词的其他字符。默认情况下,不包括数字,因此在此添加。

或者,您可以使用preg_match_all

preg_match_all('/\b[a-z\d]+\b/i', $string);

这只会将字母和数字计为字符。

答案 2 :(得分:0)

您的解决方案几乎是完美的,但有两个问题:

  1. 替换“至少一个”出现的单词分隔符(+)而不是任何(*
  2. 您的角色类(,-;)中有[...]个字符范围,不幸的是包含所有数字。如果你想匹配-(破折号),请将它始终放在角色类的开头!
  3. 因此更正后的正则表达式:/\b[-\s,:;'"_]+\b/gi

    修改:如果您需要匹配每个非字母数字字符,请使用[\W_]

答案 3 :(得分:0)

您可以使用

array = response.trim().match(/\w+/g);
count = array.length;

在您的数组中,只会存储单词(字母数字字符串)。

对于记录,\w[a-zA-Z0-9]的缩写,这意味着它无法正确捕捉具有特殊字符的字词,例如journée,但它会为{{1}返回6 }}

答案 4 :(得分:0)

看看这个演示。

<强> DEMO

您可以使用:response.replace(/['?:_!'"@#$&%\^*()\\\/.-]/g,"").split(/[ \n\r]/);