2017-08-25 57 views
0

我需要如果我使用正則表達式來寫一點正則表達式匹配,這將在正則表達式匹配的幫助:不會匹配每個appearence

[a-zA-Z]+(_[a-zA-Z0-9]+)?

形式的字符串相匹配出現的任何上述它匹配所需的部分,但也將匹配到4_abcabc部分,這不是預期的。我試圖用它排除在外:

(?:[^a-zA-Z0-9_]|^)([a-zA-Z]+(_[a-zA-Z0-9]+)?)(?:[^a-zA-Z0-9_]|$)

的問題是,「不是」開頭相匹配,並且最終是不是真的那樣工作我希望他們會。如果我使用他們的例子

a_d Dd_da 4_d d_4

他們會阻止匹配第二Dd_da因爲空間是在第一match.Sadly使用,因爲我使用JS我不能使用lookarounds。

所以輸入: a_d Dd_da 4_d d_4

應符合:a_dDd_dad_4

但比賽:a_d(有在後面加上一個空格)

有另一種方式來匹配需要的部分,還是不消費'錨'匹配?

我真的很感謝你的幫助。

+2

'\ b'怎麼辦? ['\ b [a-zA-Z] +(_ [a-zA-Z0-9] +)?\ b'](https://regex101.com/r/XS4C23/1) – trincot

+0

@trincot that worked !我之前忽略了這個,因爲我雖然'∧''∨'可能被算作「單詞的一部分」,但是解決了這個問題!你可以請轉貼這個答案嗎? – Feirell

回答

2

可以利用\b

\b[a-zA-Z]+(_[a-zA-Z0-9]+)?\b

\b的(零寬度)點,其中任一前面的字符或以下字符是字母,數字或下劃線,但不能兩者都相匹配。如果第一個/最後一個字符是字母,數字或下劃線,則它還與字符串的開始/結束匹配。