繁体   English   中英

正则表达式匹配开头括号前面没有“]”

[英]Regex to match opening parentheses not preceded by “]”

我有一些文本,其中正常的降价和自定义降价扩展混合在一起。 这非常有效。

[My Link Title](http://example.com)

(extension: value attribute: value)

但是,我有一个问题:在编辑文本时应用一些样式,我需要一种方法来匹配扩展片段的左括号,而不匹配降价链接的左括号。

换句话说:我需要一个正则表达式(在javascript中工作)以匹配一个左括号(并且只有括号)

  1. 继续[a-z0-9]+:
  2. 没有一个]字符。

我当前的正则表达式(它可以很好地匹配扩展标记打开括号但不幸的是也包括降价链接开头括号)看起来像这样: /\\((?=[a-z0-9]+:)/i

我已经看到人们在正则表达式的开头使用正面前瞻和否定,如此/(?=[^\\]])\\((?=[a-z0-9]+:)/i来检查这个在PHP中 。不幸的是,这似乎不适用于javascript。


更新

谢谢你的提示!

我遇到的问题是我正在为CodeMirror创建一个“简单模式”语法模式来应用突出显示。 这允许您指定将应用于匹配字符的正则表达式和标记,但不允许对匹配进行任何进一步操作。 但是你可以写一个完整的语法模式,你可以在这里进行这种操作,但我不能这样做:-s

毕竟,我选择了其他解决方案。 我刚刚创建了两个正则表达式:

  1. 将所有打开的扩展括号与前面的字符匹配,然后“]”:
    /[^\\]]\\((?=[a-z0-9]+:)/i
  2. 匹配所有打开的扩展括号,没有任何前面的字符:
    /^\\((?=[a-z0-9]+:)/i

即使它不是最干净的方式,它现在似乎运作得很好。

使用跳过和匹配技巧

\[[^\]]+\]\([^\)]+\)|(\(\b)
  • \\[[^\\]]+\\]\\([^\\)]+\\) - 匹配[]()链接(如果是这样,你也可以写\\[.*?\\]\\(.*?\\)令人困惑的),或 -
  • (\\(\\b) - 匹配并捕获直接在字母数字字符之前的空括号。

工作示例: https//regex101.com/r/tY9sS4/1

您必须查看结果并仅处理捕获的$1分组的匹配项,并忽略其他匹配项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM