JavaScript正则表达式跳过子模式

时间:2014-10-13 09:26:50

标签: javascript regex

我真的无法想出这个。

我有一个字符串,我试图匹配标有开括号和右括号的三个组(例如{content}),我在双括号下面的自定义字符串意味着它被转义。

SetValue:{1} when {OVERVIEW{{}}.Debug=1} else {0}
// Here is an actual real life example
ValidWhen: {! Matches('^\\d{{3}}\\s\\d{{3}}\\s\\d{{3}}[\\s\\S]', COLLECTION.AccountNumber)} {Account Number must not be more than 9 numbers.}

我无法弄清楚正则表达式匹配第二组{OVERVIEW{{}}.Debug=1}而不是{OVERVIEW{{我最接近使用此正则表达式,因为我认为我可以使用lookbehind防止它停在双支撑上。

/{(?!\}).*?\}/

这甚至可能吗?或者我需要更精细的字符串解析吗?

2 个答案:

答案 0 :(得分:3)

以下正则表达式适用于有效输入 1

/{(?:[^{}]|{{|}})*}/

我们只是禁止任何{}内部大括号,并且只允许加倍{{}}

1 以上是上面的正则表达式可能会返回意外结果的一些输入:

{{0}} text

此正则表达式将匹配{0},这很可能不正确。

{{ OVER}

未打开的大括号,很可能是无效的代码。

{ A {B } C}

嵌套大括号 - 不确定这是否有效,但上面的正则表达式会抓取{B }

Demo on regex101

答案 1 :(得分:1)

{[^}{]*}|{\S+}

试试这个。见演示。

http://regex101.com/r/sK8oK9/6