15

我想计算字符,但它们可能被不匹配的字符分隔。

这是一个例子。我想匹配包含 10 个或更多单词字符的文本。它可能包含空格,但我不想计算空格。

不应匹配:“foo bar baz”(应计为 9) 不应匹配 “a a”(应计为 2) 应匹配:“foo baz bar”(应计为 10,匹配整个字符串)

这是我想出的,但它很重要:

((?<=\s)*\w(?=\s)*){10}

编辑我不想包含用于计数的空格。对不起,我编辑了几次,我没有正确描述它。

对此有什么想法吗?

4

3 回答 3

18

嘿,我认为这将是一个简单但有效的方法:

( *?[0-9a-zA-Z] *?){10,}

分解正则表达式:

  1. ( *? --------It can start with space(s)
  2. [0-9a-zA-Z] -Followed with the alphanumeric values
  3. *?) ---------It can end with space(s)
  4. {10,} -------Matches this pattern 10 or more times

关键:当我查看正则表达式的计数时,它适用于组,即括号“ ()”中的内容,这种情况下,从字母数字值后跟空格的多个空格后跟空格仍然算作一次匹配。希望能帮助到你。:)

于 2013-08-09T15:02:17.350 回答
6

使用一个使用每个单词 char 占用空格的组,并计算组数:

^(\s*\w){10,}\s*$
于 2013-08-09T10:42:32.150 回答
3

使用 JS:删除空格,然后进行\w检查

'foo baz barz'.replace(/ /g,'').match(/\w{10,}/) != null //true
'foo bar baz'.replace(/ /g,'').match(/\w{10,}/) != null //false

匹配文本中的电话号码:

var test = 'something foo baz barz 07999-777-111 and 01234 567890 01234567890 some more'.match(/((\(?0\d{4}\)?[ -]?\d{3}[ -]?\d{3})|(\(?0\d{3}\)?[ -]?\d{3}[ -]?\d{4})|(\(?0\d{2}\)?[ -]?\d{4}[ -]?\d{4}))([ -]?\#(\d{4}|\d{3}))?/g);
//result: ["07999-777-111", "01234 567890", "01234567890"]
于 2013-08-09T10:58:40.330 回答