我试图将两个单独的正则表达式查询合并到一个默认的查询中。我有一个小脚本。
第一个查询是
/\[(.*?)\]/g
哪个匹配像这样的短代码
[gallery]
第二个查询是
/\[([^\]]+)]([^\[]+)\[\/([^\]]+)]/g
哪个匹配像这样的短代码
[gallery]data[/gallery]
当我尝试组合查询时,像这样
/\[(.*?)\]|\[([^\]]+)]([^\[]+)\[\/([^\]]+)]/g
所有内容都匹配,除了"数据"在扩展的短代码中,就像这样。
[gallery]
[gallery][/gallery]
我期待/想要看到的结果是这个
[gallery]
[gallery]data[/gallery]
答案 0 :(得分:1)
只需反转模式。因为匹配的顺序类似于您首先给出的正则表达式(即正则表达式,它出现在OR |
运算符之前)将进行匹配操作,然后是第二个正则表达式。您将\[(.*?)\]
作为第一个正则表达式,因此它也匹配必须由第二个正则表达式匹配的字符串。颠倒顺序会强制正则表达式引擎首先匹配像[gallery]data[/gallery]
这样的字符串。之后,匹配此[gallery]
的字符串。
\[([^\]]+)]([^\[]+)\[\/([^\]]+)]|\[(.*?)\]
答案 1 :(得分:0)
答案 2 :(得分:0)
试试这个:
\[(.*?)\](?:([^\[]+)\[\/([^\]]+)])?
答案 3 :(得分:0)
答案 4 :(得分:0)
使用可选的非捕获组,以及对第一个匹配的反向引用:
/\[(.+?)\](?:([^\]]+)\[\/\1\])?/g