gpt4 book ai didi

javascript - 查找包含分隔符转义形式的子字符串(正则表达式)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:53:36 24 4
gpt4 key购买 nike

大家好!

我正在玩 markdown,处理内联标记和转义字符。

问题:

我想转换这个:some text *some number \* other number* more text

进入这个:some text <strong>some number * other number</strong> more text

我当前的模式是:/((?!\\)\*)(.*?)((?!\\)\*)/g

但是 (.*?)组似乎捕获了 \字符,所以第三组找到第二组 *字符并停止寻找第三个,这应该是它的目标。

可能的解决方案:

我可以使用负后视来解决这个问题:/((?<!\\)\*)(.*?)((?<!\\)\*)/g ,但如果可能的话,我想避免它。

我可以修改我的其他模式以使其工作吗?

最佳答案

你可以使用

var str = "some text *some number \\* other number* more text";
console.log(
str.replace(/((?:^|[^\\])(?:\\{2})*)\*([^\\*]*(?:\\[\s\S][^*\\]*)*)\*/g,
function($0, $1, $2) { return $1 + '<strong>' + $2.replace(/\\([\s\S])/g, '$1') + '</strong>'; }
)
)

第一个 /((?:^|[^\\])(?:\\{2})*)\*([^\\*]*(?:\\[\s\S][^*\\]*)*)\*/g 正则表达式匹配未转义的 * 中的所有字符串:

  • ((?:^|[^\\])(?:\\{2})*) - 第 1 组:
    • (?:^|[^\\]) - 字符串开头或非反斜杠
    • (?:\\{2})* - 任何出现 0 次以上的双反斜杠(这避免匹配转义的 *)
  • \* - * 字符
  • ([^\\*]*(?:\\[\s\S][^*\\]*)*) - 第 2 组:
    • [^\\*]* - 除了 \*
    • 之外的 0+ 个字符
    • (?:\\[\s\S][^*\\]*)* - 0+ 序列
      • \\[\s\S] - \ 和任意字符
      • [^*\\]* - 除了 \*
      • 之外的 0+ 个字符
  • \* - * 字符。

匹配项作为 replace 方法的第二个参数传递给匿名方法,并且 Group 2 的内容被处理为使用 .replace(/\\([\s\S])/g, '$1'):\\ 匹配反斜杠,([\s\S]) 匹配并将任何字符捕获到组 1 中,这是用组占位符 $1 替换后剩下的内容。

关于javascript - 查找包含分隔符转义形式的子字符串(正则表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54006138/

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