正则表达式:如何删除匹配字符串之前的字符?

5

我正在拦截包含以下字符的消息:

*_-

然而,无论何时这些字符中的任何一个到达,它们都会始终由\前缀。不过,\仅用于格式化,我想在将其发送到服务器之前将其删除。我知道如何轻松创建正则表达式来从单个字母中删除此反斜杠:
'omg\_bbq\_everywhere'.replace(/\\_/g, '')

我知道我可以针对每个要删除前置反斜杠的字符执行此操作3次。但是,如何创建一个单一的正则表达式来检测所有三个字符,并在所有3种情况下删除前置反斜杠?


'omg\_bbq\_everywhere' → '到处都是烧烤' - user557597
2个回答

3

您可以使用字符类,例如[*_-]

要仅删除这些字符前面的反斜杠:

document.body.innerHTML =
   "omg\\-bbq\\*everywhere\\-".replace(/\\([*_-])/g, '$1');

当您将子模式放入捕获组((...))中时,您会将该子文本捕获到编号缓冲区中,然后可以使用$1反向引用来引用它(因为模式中只有一个(...))。


可能是因为模式中只有一个(...),所以它的编号是1;或者是因为该组包含需要替换的数据。 - user557597

1
这是使用原子匹配的好时机。具体来说,您需要检查斜杠,然后进行任何这些字符的正向先行查找。
忽略代码,您想要的原始正则表达式是:
\\(?=[*_-])
一个字面上的反斜杠,前面有这些字符之一:* _ -
所以现在你正在匹配斜杠。原子匹配是一个零长度匹配,因此它不匹配任何内容,但设置了一个要求:“为了使这个匹配有效,它需要跟随[*_-]”。
原子组:http://www.regular-expressions.info/atomic.html 环视语句:http://www.regular-expressions.info/lookaround.html 可用正向和负向前瞻和后顾匹配。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接