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

时间:2016-02-05 18:27:41

标签: javascript regex string

我拦截的邮件包含以下字符:

*_-

但是,每当这些角色中的任何一个出现时,它始终会以\开头。 \仅用于格式化,我想在将其发送到我的服务器之前将其删除。我知道如何轻松创建一个正则表达式,从单个字母中删除这个反斜杠:

'omg\_bbq\_everywhere'.replace(/\\_/g, '')

我认识到我可以执行此操作3次:每个字符一次,我想删除前面的反斜杠。但是我如何创建一个单一的正则表达式来检测所有三个字符并在所有3个案例中删除前面的反斜杠?

2 个答案:

答案 0 :(得分:3)

您可以使用[*_-]等字符类。

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



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




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

答案 1 :(得分:1)

这是使用原子匹配的好时机。具体来说,您要检查斜杠,然后检查任何这些字符的正向前瞻。

忽略代码,你想要的原始正则表达式是:

\\(?= [* _-])

一个字面反斜杠,前面有一个这样的字符:* _-

所以现在你匹配斜杠了。原子匹配是一个0​​长度匹配,所以它不匹配任何东西,但设置一个要求“为了这是一个有效的匹配,它需要后跟[* _-]”

原子团:http://www.regular-expressions.info/atomic.html

环顾陈述:http://www.regular-expressions.info/lookaround.html

可以获得正面和负面的前瞻和后瞻性匹配。