我需要将降价URL转换为<a href="" />链接。但是,使用PHP的同一个正则表达式不能使用JavaScript。我做错了什么?

正则表达式:\[([^]]*)\]\(([^\s^\)]*)[\s\)]

这是您可以自己查看的演示链接:
https://regex101.com/r/kZbw7g/5

插入符号在JavaScript中似乎具有不同的含义。

任何帮助表示赞赏。

最佳答案

看这个

 \[
 ( [^]]* )                     # (1)
 \]
 \(
 ( [^\s^\)]* )                 # (2)
 [\s\)]


这是您的正则表达式的可读格式版本。

有一些规则可以控制字符类的解析(非Java / DotNet)。

该类将打开[且不会转义。

规则#1:下一个未转义的]关闭类。

唯一的例外是当它是类中的第一项时。 []]

此异常也适用于否定类[^]],因为
它仍然是课程中的第一项。

这就是为什么您的正则表达式可以在pcre演示中使用的原因。

但是,JS仍然是过时的引擎,对于]没有这种宽限期
是第一项。
因此,必须将其转义。 [\]][^\]]

在此处查看JS版本https://regex101.com/r/kZbw7g/6

附录:

此外,您可以查看未转义的宽限期如何/为什么存在
]当它是第一项时。

最初,在设计用于类解析的规则时,
确定不允许EMPTY类[]

修复状态可能超出了设计师想要的状态
处理。换句话说,他们希望将解析类设置得非常低
聪明的事情。

谁知道为什么

这是踢人,不允许空课。
如果]紧接在课程开始后(第一项),
它不可能是结尾],因为那是非法的
空类。

但是,由于存在有效的右括号[]],因此没有歧义,
第一项]是文字。

这样,“第一项例外”就诞生了。

这是证明:

pcre https://regex101.com/r/v0uBHA/1
JS https://regex101.com/r/foqcpL/1
Python https://regex101.com/r/sko0Qv/1
https://regex101.com/r/Nhx8Ks/1

10-06 14:16