2014-12-03 71 views
0

我能串[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

任何特別的原因,你爲什麼不直接使用全局標誌'/ \ [(ORG | PER | LOC)\ S [^ \ W _] + $/g'? – Tomalak 2014-12-03 07:53:17

+0

然後你必須刪除錨,但無論如何這是一個好點。 – raina77ow 2014-12-03 07:53:44

+0

@Tomalak我無法得到它的工作。 :(http://jsfiddle.net/rdesai/27vfd38w/4/ – 2014-12-03 07:55:41

回答

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 
}