gpt4 book ai didi

javascript - 正则表达式匹配前面没有 "]"的左括号

转载 作者:行者123 更新时间:2023-11-29 10:12:50 24 4
gpt4 key购买 nike

我有一段文本,其中普通 Markdown 和自定义 Markdown 扩展混合在一起。这非常有效。

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

(extension: value attribute: value)

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

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

  1. [a-z0-9]+:
  2. 继续
  3. 前面没有] 字符。

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

我见过有人在正则表​​达式的开头使用正前瞻和否定,例如 /(?=[^\]])\((?=[a-z0-9]+:)/i 来检查 在 PHP 中。不幸的是,这似乎在 javascript 中不起作用。


更新

感谢您的提示!

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

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

  1. 将所有左扩展括号与除“]”之外的前导字符匹配:
    /[^\]]\((?=[a-z0-9]+:)/i
  2. 匹配所有没有任何前置字符的左扩展括号:
    /^\((?=[a-z0-9]+:)/i

尽管这不是最简洁的方式,但目前看来效果还不错。

最佳答案

使用 skip and match trick :

\[[^\]]+\]\([^\)]+\)|(\(\b)
  • \[[^\]]+\]\([^\)]+\) - 匹配 []() 链接(你也可以写 \[.*?\]\(.*?\) 如果这太困惑了),或者 -
  • (\(\b) - 匹配并捕获直接位于字母数字字符之前的左括号。

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

您将不得不查看结果并仅处理捕获到 $1 分组的匹配项,而忽略其他匹配项。

关于javascript - 正则表达式匹配前面没有 "]"的左括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29938114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com