gpt4 book ai didi

javascript - 使用 Regex 前瞻匹配特殊字符

转载 作者:行者123 更新时间:2023-11-29 21:34:20 25 4
gpt4 key购买 nike

我收到的消息有下划线:

  _omgitworks_

然而,当这些消息被我们的 HTML 有线格式化程序格式化时,我们收到它们在下划线前面加上反斜杠:

  \_omgitworks\_

我创建了以下正则表达式来捕获反斜杠并将其删除,以便文本标记正确:

rawInput.replace(/\\([_])/g, '$1');

但是,存在用户将文本设为斜体的极端情况。当用户utalicizes 文本,我们收到的消息没有反斜杠,但有下划线 - 我们想删除下划线。这是收到的文本看起来像:

_omgitworks_

我正在尝试设计一个正则表达式,它匹配一个反斜杠后跟一个下划线然后替换反斜杠(但不是下划线)或者如果有只是一个没有反斜杠的下划线,它只匹配下划线。

我尝试使用前瞻来实现这一点:

var regex = /\\(?=_)|_/g;
var string = '\\_omgitworks\\_'
string.replace(regex, '')
>>> "omgitworks"

但它删除了反斜杠和下划线,而不仅仅是下划线。是否有任何我忽略的前瞻性细微差别?

最佳答案

您可以使用以下正则表达式:

\\(_)|(^|[^\\])_

并替换为 $1$2

参见 regex demo

解释:

  • \\(_) - 第一个替代匹配 \ 后跟 _(捕获组 1)
  • | - 或者...
  • (^|[^\\])_ - 另一种匹配字符串开头或除 \ 以外的任何字符(捕获到第 2 组)后跟下划线.

在替换部分,我们使用反向引用恢复捕获。在 JS 中,失败的组总是预先填充一个空字符串,因此即使捕获组恰好为空也可以安全使用。

var re = /\\(_)|(^|[^\\])_/g; 
var str = '_omgitworks_\n\\_omgitworks\\_';
var result = str.replace(re, '$1$2');
document.body.innerHTML = "<pre>"+ result + "</pre>";

关于javascript - 使用 Regex 前瞻匹配特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35276579/

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