正则表达式替换文本,除非它前面有反斜杠而不使用后视

Posted

技术标签:

【中文标题】正则表达式替换文本,除非它前面有反斜杠而不使用后视【英文标题】:Regex replacing text unless it's preceeded with backslashes without the usage of look-behind 【发布时间】:2022-01-09 13:45:38 【问题描述】:

我有这种情况,我试图使用正则表达式替换文本块中的一堆标签,但是我也希望允许用户转义任何标签。

注意:我想避免向前/向后看,因为 Safari 不支持它

实时示例:https://regex101.com/r/mDGs3C/1

Welcome  PLAYER_NAME  to the event

使用替换应该呈现

Welcome Richard to the event

为此,我使用了以下正则表达式,它似乎可以正常工作。

/\s*PLAYER_NAME\s*/gm

不过我也想要能够逃脱的能力,所以下面

Welcome  PLAYER_NAME  to the event, you can use tags in here such as \\ PLAYER_NAME 

我想输出为 ...

Welcome Richard to the event, you can use tags in here such as  PLAYER_NAME 

所以我尝试在正则表达式的开头使用以下内容来声明如果它包含双反斜杠,我不希望它匹配。

/[^\\]\s*PLAYER_NAME\s*/gm

这几乎可以工作,但是在某些情况下它会切断前一个单词的最后一个字母,看看我的例子,看看 e 被切断了欢迎这个词

https://regex101.com/r/mDGs3C/1

【问题讨论】:

你确定你不需要逃避卷曲吗?即[^\\]\\\s*PLAYER_NAME\s*? 【参考方案1】:

捕获非斜线并将它们放回替换中:

Operation Parameter
Search ([^\\])\\\s*PLAYER_NAME\s*
Replace $1 Richard

【讨论】:

这很好用,谢谢!只是将它添加到自己的组中,而不是确保我在替换中使用它:)

以上是关于正则表达式替换文本,除非它前面有反斜杠而不使用后视的主要内容,如果未能解决你的问题,请参考以下文章

为啥顺风 css 类名中有反斜杠?

正则表达式:向后看以避免奇数个连续的反斜杠

使用正则表达式替换仅保留正斜杠和数字

除非被特定标签包围,否则替换字符

re模块 正则表达式

Java 正则表达式错误 - 使用组参考进行后视