Javascript正则表达式OR运算符

时间:2014-08-26 05:21:52

标签: javascript regex

我试图将两个单独的正则表达式查询合并到一个默认的查询中。我有一个小脚本。

第一个查询是

/\[(.*?)\]/g

哪个匹配像这样的短代码

[gallery]

第二个查询是

/\[([^\]]+)]([^\[]+)\[\/([^\]]+)]/g

哪个匹配像这样的短代码

[gallery]data[/gallery]

当我尝试组合查询时,像这样

/\[(.*?)\]|\[([^\]]+)]([^\[]+)\[\/([^\]]+)]/g

所有内容都匹配,除了"数据"在扩展的短代码中,就像这样。

[gallery]
[gallery][/gallery]

我期待/想要看到的结果是这个

[gallery]
[gallery]data[/gallery]

5 个答案:

答案 0 :(得分:1)

只需反转模式。因为匹配的顺序类似于您首先给出的正则表达式(即正则表达式,它出现在OR |运算符之前)将进行匹配操作,然后是第二个正则表达式。您将\[(.*?)\]作为第一个正则表达式,因此它也匹配必须由第二个正则表达式匹配的字符串。颠倒顺序会强制正则表达式引擎首先匹配像[gallery]data[/gallery]这样的字符串。之后,匹配此[gallery]的字符串。

\[([^\]]+)]([^\[]+)\[\/([^\]]+)]|\[(.*?)\]

DEMO

答案 1 :(得分:0)

  \[([^\]]+)]([^\[]+)\[\/([^\]]+)]|\[(.*?)\]

试试这个。先做大一点。

参见演示。

http://regex101.com/r/tK9sJ3/1

答案 2 :(得分:0)

试试这个:

\[(.*?)\](?:([^\[]+)\[\/([^\]]+)])?

答案 3 :(得分:0)

只是简单的尝试:

/\[[^\]]+]([^\[]+\[\/[^\]]+])?/g

Regular expression visualization

Debuggex Demo

答案 4 :(得分:0)

使用可选的非捕获组,以及对第一个匹配的反向引用:

/\[(.+?)\](?:([^\]]+)\[\/\1\])?/g