我正在尝试匹配两个不同令牌之间的字符串的一部分。它们可能是字符串中多次出现的标记。
示例文本(标记为斜体,要匹配的文本为粗体):
这是 [开始匹配] 示例文本 [end-match] [开始匹配] 令牌和普通 [end-match] 文字。
我有以下正则表达式,如果令牌是 {和} ,这将有效:
/{([^}]+)}/g
我无法使用 [开始匹配] 和 [结束匹配] 令牌。似乎Javascript中缺乏负面的背后隐藏是一个巨大的损失。
我无法弄清楚如何将 {和} 替换为代币 [begin-match] 和 [端匹配的。我怎么能匹配那些?
答案 0 :(得分:4)
/x(.*?)y/g
其中x
是开头令牌,y
是结尾令牌。
此RegEx表示:匹配任何内容(.
),任意次(*
),尽可能少(?
)。
你问题的直接例子是:
/\[begin-match\](.*?)\[end-match\]/g
示例文本现在位于第一个捕获组中。
答案 1 :(得分:2)
\[begin-match\]((?:(?!\[end-match\]).)*)\[end-match\]
你可以尝试一下。参见演示。