我能够将字符串[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
答案 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
}