正则表达式替换文本,除非它前面有反斜杠而不使用后视
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 |
【讨论】:
这很好用,谢谢!只是将它添加到自己的组中,而不是确保我在替换中使用它:)以上是关于正则表达式替换文本,除非它前面有反斜杠而不使用后视的主要内容,如果未能解决你的问题,请参考以下文章