为什么我的正则表达式在PHP中工作而不是JavaScript?

Fiz*_*zix 14 javascript regex

我有自己创建的正则表达式,我目前正在使用PHP运行.虽然当我将它合并到JavaScript时,它拒绝工作.我也用Python试过它,它的工作原理非常好.

正则表达式:

@[[](.[^]]+)[]][()](\d+)[)]
Run Code Online (Sandbox Code Playgroud)

在PHP中测试,并正在工作

在JavaScript中测试,而不是工作

Dow*_*oat 31

JavaScript不会自动转义你的].

这将有助于您获得视觉概念:

PCRE:

PCRE

JS:

JS

蟒蛇:

蟒蛇

所以要解决这个问题,你需要转义括号

@[[](.[^\]]+)[\]][()](\d+)[)]
//      ^     ^  
Run Code Online (Sandbox Code Playgroud)

编写此正则表达式的最佳方法是最小化字符类的使用:

@\[(.[^\]]+)\][()](\d+)\)
Run Code Online (Sandbox Code Playgroud)

这就是为什么逃避这些东西而不是依赖于味道的怪癖是一个好习惯.

我通过regex101生成了这些图像.