我有几段文字,其中普通markdown和自定义markdown扩展名混合在一起。效果很好。
[My Link Title](http://example.com)
(extension: value attribute: value)
但是,我有一个问题:在编辑文本时要应用一些样式,我需要一种方法来匹配扩展代码片段的左括号而不匹配markdown链接的左括号。
换句话说:我需要一个正则表达式(在javascript中有效)来匹配一个左括号(并且只匹配括号)
[a-z0-9]+:
和]
字符。我当前的正则表达式(可以很好地匹配扩展标签的右括号,但不幸的是也包括markdown链接的右括号)看起来像这样:/\((?=[a-z0-9]+:)/i
。
我已经看到人们在这样的正则表达式的开头使用否定的正向查找/(?=[^\]])\((?=[a-z0-9]+:)/i
来检查此问题。不幸的是,这似乎不适用于javascript。
更新
感谢您的提示!
我遇到的问题是我正在为CodeMirror创建一个“简单模式”语法模式以应用突出显示。这允许您指定一个正则表达式和一个标记,这些标记将应用于匹配的字符,但不允许对匹配进行任何进一步的操作。但是,您可以编写一个完整的语法模式,在其中可以执行这种操作,但是我无法做到这一点:-s
毕竟,我提出了另一种解决方案。我刚刚创建了两个正则表达式:
/[^\]]\((?=[a-z0-9]+:)/i
/^\((?=[a-z0-9]+:)/i
即使这不是最干净的方法,但目前看来效果还不错。
使用跳过和匹配技巧:
\[[^\]]+\]\([^\)]+\)|(\(\b)
\[[^\]]+\]\([^\)]+\)
-匹配[]()
链接(\[.*?\]\(.*?\)
如果太混乱也可以写),或者-(\(\b)
-匹配并捕获直接在字母数字字符前的开括号。工作示例:https://regex101.com/r/tY9sS4/1
您将只能看到结果并仅处理$1
捕获了分组的匹配项,而忽略其他匹配项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句