2017-02-24 41 views
0

我有這樣的正則表達式正則表達式沒有得到字符

\.*?\{\{([\w\s]+)\|([\w\s]+)\}\} 

並正確捕捉這個詞是這樣的:

{{58afc8ed3688d3001cb8b043_1487915885599|data}} 

但是,如果我把一個詞這樣

{{58afc8ed3688d3001cb8b043_1487915885599|data?}} 

它無法捕獲它。

我應該如何捕捉後者?

回答

2

你可以試試下面的正則表達式

.*?\{\{([\w\s]+)\|(.*?)\}\} 

看到demo

+0

它不工作在我的替換功能在javascript – kohli

+0

@kohli檢查更新的答案 – m87

0

\.*?\{\{([\w\s]+)\|([\w\s?]+)\}\}應該做的伎倆。 \w\s不會出現問號。

+0

顯示如果我把其他字符那裏 – kohli

+0

你知道哪些字符提前?如果你這樣做,也把它們放在最後的方括號之間。如果你不這樣做,你需要'。*'來保證比賽。如果你想要的只是空格,試試'\ S'。 –

2

你的兩個例子唯一的區別是你有一個額外的'?'字符在(或之後)第二組中。

siam的回答是正確的,但會導致非常廣泛的匹配,這可能不是您想要的。畢竟,在極端情況下,如果需要,可以用\{\{(.*)\|(.*)\}\}替換整個正則表達式。

假設這只是你關心的一個問號,你可以:

  • 通過 延長([\w\s]+)是添加到您可接受的字符的任何地方你的小組中([\w\s?]+)
  • 明確地將它添加到年底 您的基團,其中取代([\w\s]+\?*)([\w\s]+)(這將允許 零或任意數量的尾隨問號)的
  • 的後添加它如果你不關心與([\w\s]+)\?*

當然捕捉它,如果你的意思是接受的不僅僅是問號,你可以簡單地保持同樣的方式將它們添加其它特殊字符組。

+0

謝謝,我現在明白這背後的概念 – kohli