JavaScript 正则表达式 OR 运算符

标签 javascript regex

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

第一个查询是

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

与这样的短代码匹配

[gallery]

第二个查询是

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

与这样的短代码匹配

[gallery]data[/gallery]

当我尝试组合查询时,如下所示

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

除了扩展短代码中的“数据”之外,所有内容都匹配,如下所示。

[gallery]
[gallery][/gallery]

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

[gallery]
[gallery]data[/gallery]

最佳答案

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

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

DEMO

关于JavaScript 正则表达式 OR 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25498580/

相关文章:

javascript - 为什么window.setTimeout在IE9中抛出异常?

regex - 尝试用pihole正则表达式YouTube广告

python - 一次读取 1mb 的原始文件,然后在 Python 中执行 Regex

regex - 匹配除变量字符串之外的所有内容

javascript - 为什么 style.display 设置为 'block' 时会改变我的 div 的大小?

javascript - Meteor.loginWithPassword 中的自定义验证

javascript - 正则表达式:不要在组中包含子字符串

javascript - 在字符串中查找 ID 并从数组中替换

javascript - Angular ui-router 根据路由参数渲染不同的组件

javascript - 如何在 Javascript 函数中处理箭头键和 <(大于)?哪个事件和哪个代码(charCode Vs keyCode)?