2015-05-04 87 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

相关问题