2016-08-17 60 views
3

我試圖用正則表達式解析下面的句子(JavaScript)的多個工作:正則表達式允許在一個句子

  • 祝電視
  • 我想要一些巧克力
  • 我需要火

目前我正在嘗試:I(\b[a-zA-Z]*\b){0,5}(TV|chocolate|fire)但它不起作用。我也用\w做了一些測試,但沒有運氣。

我想允許任何字(最多5個字)之間的「我」和最後一個字witch是預定義的。

回答

4

要考慮非字字符在中間的話,你可以使用

/I(?:\W+\w+){0,5}\‌​W+(?:TV|chocolate|fir‌​e)/ 

regex demo

的要點在於你在「單詞」之間添加了單詞邊界,但沒有考慮空格,標點符號等(所有其他非單詞字符)。

圖案的詳細資料

  • I - 左定界符
  • (?:\W+\w+){0,5}\‌​W+匹配 - 1+非字字符(\W+)和匹配的0至5的序列(由於limiting quantifier {n,m})1+後面的字符(\w+)和末尾的\W+與必須存在的一個或多個非字詞字符相匹配,以便將最後匹配的字符從...
  • (?:TV|chocolate|fir‌​e) - 匹配的結尾分隔符
+0

(*或*,使用'\ s'總是優先於*空格*) –

+0

有時,字面空間是指。順便說一句,這裏是一個類似的正則表達式:['/I(?:\W+\w+){0,5}\W+(?:TV|chocolate|fire)/'](https://regex101.com/r/ iE5nA7/1),它確保在字符塊之間存在非字詞字符。 –

+1

\ W + \ w +的版本就是我要找的!謝謝 ! :) – jaumard

0

您需要在I.之後添加空格,否則它不會捕獲整個句子。

I(\b[a-zA-Z ]*\b){0,5}(TV|chocolate|fire) 

我馬麗娟現場測試正則表達式是regexr

+0

它會[匹配'我想要一些巧克力'](https:// regex101。com/r/yE9dD3/1) –

+0

有了這個表達式,你可以忽略所提到的'I([] * \ b [a-zA-Z] * \ b){0,5}(TV |巧克力|火)' –

0

如果你不關心空格,請使用:

/I(\s[a-zA-Z]*\s?){0,5}(TV|chocolate|fire)/

+0

這不會解釋單詞與標點符號分開的情況,這就是爲什麼我建議使用'\ S' /'\ s'。 –

0

嘗試

/I\s+(?:\w+\s+){0,5}(TV|chocolate|fire)/ 

Test here)基於

Stefan Kert版本,但是依靠每個額外單詞的右側空格而不是wo第三界限。

它還接受任何有效的「單詞」(\ w)任何長度和任何有效間距字符(不關心重複)的字符單詞。