2017-08-18 77 views
0

我有以下的正則表達式爲什麼不能「 B w +(?=荷蘭國際集團) B」匹配「我唱歌,當你跳舞」

var reg = /\b\w+(?=ing)\b/g; 
var str = "I'm singing while you're dancing"; 
str.match(reg) // ==>null 

但是,如果正則表達式是/\b\w+(?=ing\b)/g那麼str可以匹配'sing,danc'

爲什麼那個mach,但我以前的例子不是?

+0

請勿過分複製正則表達式:'/ \ b \ w + ing \ b/g'。 – deceze

+1

他不想匹配ing部分 – marvel308

+0

@ marvel308他在javascript中我們可以提取捕獲組。更嚴重的問題是他不想匹配'sing,danc',所以\ b是錯誤的事情來測試。 - 但沒有明確說明爲什麼'唱歌,跳舞'的比賽是錯誤的發現正確的人物組是不可能的。 – Taemyr

回答

1

您需要在最後刪除\ b,因爲您要匹配的部分不會在邊界上結束。 danc唱會批\ B \ w + \ B,而舞蹈和唱歌也不會

\b\w+(?=ing) 

檢查演示here

\b\w+(?=ing\b) 

將確保您的ING是在邊界,而不是

\w+ 

部分

+1

*爲什麼*會很好解釋... – deceze

+0

正處於編輯中 – marvel308

+0

' \ b \ w +(?= ing \ b)'被拒絕。 OP不想匹配'sing,danc'。 – Taemyr

4

因爲(?=ing)是零長度匹配。所以你試圖匹配一個或多個單詞字符,然後跟着'ing',同時跟着一個單詞邊界。

由於單詞邊界是從單詞字符到非單詞字符的變化,因此後跟「i」的單詞字符後面沒有字邊界。

/\b\w+(?=ing\b)/g與'sing,danc'中的's'匹配,因爲','是一個非單詞字符 - 因此'g'和','之間有一個單詞邊界。爲了找到正確的正則表達式,你需要更清楚地說明爲什麼'唱歌,跳舞'不應該匹配。

+0

謝謝你,我可以問你另一個正則表達式問題,你能告訴我'/((^ | %>)[^ \ t] *)'/ g'匹配什麼...我不知道'(^ |%>)'是什麼意思,我測試了很多次,但結果並不是我期望的! – Perhaps

+0

沒有必要打擾你,我已經知道爲什麼,謝謝~~ – Perhaps

+0

@可能有在線實用工具,允許艾滋病正則表達式寫作。例如在https://regex101.com/中鍵入'(^ |%>)'解釋說它是一個有兩個替代方案的捕獲組;或者匹配字符串的開始,或者直接匹配'%>'。 – Taemyr

相關問題