正则表达式匹配这种重复模式?

时间:2014-12-03 07:51:04

标签: javascript regex

我能够将字符串[ORG] someText与此正则表达式匹配:/^\[(ORG|PER|LOC)]\s[^\W_]+$/



var selectedText = "[ORG] dd";

if (selectedText.match(/^\[(ORG|PER|LOC)]\s[^\W_]+$/)) {
    console.log("working");
}




输入文本可以在标记中包含任何单词。


现在我的文字为:[ORG] Lorem [ORG] ipsum(以空格结尾)

我尝试通过对模式进行分组并将其重复为+(一次或多次出现)来匹配此项。

这样:/^(\[(ORG|PER|LOC)]\s[^\W_]\s)+$/

然而它不匹配。

基本上,它应匹配:

[tag] sometext

[tag] sometext [tag2] someOtherText // ending with or without a space

因此,一般来说,它需要匹配a tag followed by a space and a word

的模式

它不匹配的内容:

[tag] sometext someMoreText

[tag] sometext someMoreText [tag9]

[tag] [tag9] sometext someMoreText 

1 个答案:

答案 0 :(得分:1)

应该是:

/^(\[(ORG|PER|LOC)]\s[^\W_]+(?:\s|$))+$/

...也就是说,在空格和行尾边界之间添加一个替换(对于字符串中的最后一个模式,不会以空格结尾)。

Demo。另请注意,如果您只需要检查字符串是否与该模式匹配,String#match方法实际上是一种过度杀伤;相反,你应该RegExp#text

var tagsPattern = /^(\[(ORG|PER|LOC)]\s[^\W_]+(\s|$))+$/;
if (tagsPattern.test(str)) {
  // matches 
}