我收到的信息有下划线:
_omgitworks_
但是,当我们收到的HTML线格式化程序格式化这些消息时 他们的下划线前面有反斜杠:
\_omgitworks\_
我创建了以下正则表达式来捕获反斜杠并删除它们 文本正确标记:
rawInput.replace(/\\([_])/g, '$1');
然而,当用户将文本斜体化时存在边缘情况。当用户 utalicizes文本,我们收到消息没有反斜杠,但有 下划线 - 我们想要删除下划线。这就是收到的 文字看起来像:
_omgitworks_
我正在尝试设计一个正则表达式,匹配反斜杠后跟一个 下划线然后替换反斜杠(但不是下划线)或者如果有的话 只是一个没有bachslash的下划线,它只匹配下划线。
我尝试使用lookaheads实现这一点:
var regex = /\\(?=_)|_/g;
var string = '\\_omgitworks\\_'
string.replace(regex, '')
>>> "omgitworks"
但它正在删除反斜杠和下划线而不仅仅是 下划线。我忽略了前瞻性的细微差别吗?
答案 0 :(得分:2)
您可以使用以下正则表达式:
\\(_)|(^|[^\\])_
并替换为$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>";
&#13;