【问题标题】:Workaround for negative look-behind in javascript [duplicate]javascript中负面后视的解决方法[重复]
【发布时间】:2017-07-11 15:17:46
【问题描述】:

我正在将我编写的 python 脚本转换为 javascript。我的 python 脚本具有以下正则表达式来匹配 '\' 的单个实例:

re.sub(r'(?<!\\)(\\{1})(?!\\)', r'\\', word)

尝试在 js 中运行时遇到编译器错误:

"Invalid regular expression: /(?<!\\)(\\{1})(?!\\)/: Invalid group"

经过一番搜索发现js中的正则表达式不支持look behinds。

我查看了this answer,他们使用了:

^(?!filename).+\.js

以字符串开头的负前瞻形式,这对我没有帮助,因为我需要将字符串中的任何位置更改为 '\''\\'。 我不认为这是一个重复的问题,因为我的问题是试图确定如何在字符串的不同点避免和匹配相同的字符,而链接的问题试图避免匹配特定的短语。

我需要匹配之前或之后没有“\”的“\”字符。

【问题讨论】:

    标签: javascript python regex


    【解决方案1】:

    您始终可以使用捕获组而不是后视

    string.match(/(^|[^\\])(\\{1})(?!\\)/)[2]
    

    let replaced = "a\\b\\\\".replace(/(^|[^\\])(\\{1})(?!\\)/, x => x[0] == '\\' ? x : 'value')
    
    console.log(replaced)

    将返回与(?&lt;!\\)(\\{1})(?!\\)相同的东西

    【讨论】:

    • 这将帮助我匹配它们,但不一定用实际的反斜杠替换转义字符,对吧?
    • @Fruitspunchsamurai 你可以在替换时检查这个,检查编辑
    【解决方案2】:

    只匹配没有断言(^|[^\\])\\([^\\]|$) 然后将它们替换回来。
    请注意,这不会告诉您它是否正在转义任何内容。
    那个正则表达式更复杂。

    【讨论】:

    • 将断言替换回去是什么意思?
    • 是的,找到/(^|[^\\])\\([^\\]|$)/g,替换"$1\\\\$2"。哪个部分令人困惑?
    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    相关资源
    最近更新 更多