JS Regexp在字符串

时间:2017-05-17 18:05:24

标签: javascript regex

/([a-zA-Z]).*?\1/

如果找到1个匹配的重复字母,则此正则表达式当前在.test()上返回true。我想让它至少匹配至少3或2并返回true。

例如,目前它在.test()上为类似;

的字符串返回true
Trickster, Been, Dekko

但我希望它返回true 仅当有超过2个匹配项时,以便以下内容在.test()上返回true

CordCord, XoXo, XolXol, PiunPiun

NOT 对我之前提到的字符串返回true。

2 个答案:

答案 0 :(得分:2)

您可以在{2,}之后使用limiting quantifier [a-zA-Z]来匹配两种或更多种模式:

([a-zA-Z]{2,}).*?\1

请参阅regex demo

<强>详情

  • ([a-zA-Z]{2,}) - 捕获与2个或更多ASCII字母匹配的第1组
  • .*? - 除了换行符之外的任何0 +字符,尽可能少(懒惰)
  • \1 - 与第1组中捕获的相同文本匹配的反向引用。

请注意,2个或更多个ASCII字母应该被捕获到1个组中(因此限制量词位于捕获括号内)。

var ss = ['Trickster, Been, Dekko', 'CordCord, XoXo, XolXol, PiunPiun'];
var re = /([a-zA-Z]{2,}).*?\1/;
for (var s of ss) {
  console.log(s,"=>",re.test(s));
}

答案 1 :(得分:1)

您可以指定至少三个:/([a-zA-Z]){3,}.*?\1/

> /([a-zA-Z]){3,}.*?\1/.test('Been')
<- false
> /([a-zA-Z]){3,}.*?\1/.test('CordCord')
<- true