2015-05-04 152 views
1

我試圖匹配兩個不同令牌之間的字符串的一部分。它們可能是字符串中令牌的多次出現。匹配兩個不同令牌之間的任何字符串

示例文字(記號是斜體,文本匹配是粗體顯示):

這是[開始匹配]一個示例文本[最終匹配]一些 [開始比賽]代幣和正常[結束符]文本。

我有以下的正則表達式,這將工作,如果令牌是{}

/{([^}]+)}/g 

我不能得到這個工作的[開始匹配][結束匹配]令牌。似乎在JavaScript中缺乏負面的後顧之憂是一大損失。

我不能找出如何替代{}爲令牌[開始匹配][最終匹配]。我怎麼能匹配那些?

+0

您可能還需要知道[在正則表達式中必須轉義哪些特殊字符?](http://stackoverflow.com/questions/399078/what-special-characters-must-be-escaped-in-regular-表達式) – HamZa

回答

4

/x(.*?)y/g其中x是開始令牌和y結束令牌。

這個表達式意味着匹配任何條件(.),任意次數(*),如幾次儘可能(?)。

從你的問題的一個直接的例子是:現在

/\[begin-match\](.*?)\[end-match\]/g 

示例文本是第一個捕獲小組。

2
\[begin-match\]((?:(?!\[end-match\]).)*)\[end-match\] 

你可以試試看。

https://regex101.com/r/uE3cC4/23

+1

就是這樣:)謝謝! (我必須等待接受你的回答) – Roemer

+0

你可以使用'(。*?)'來執行一個非貪婪的匹配,而不是'(?!...)'構造,'\ [begin-match \ ](。*?)\ [end-match \]' – robertklep

+0

@robertklep這與我的回答幾乎相同。 – Xufox

相關問題