我正在使用正则表达式我的正则表达式是/\[([^]\s]+).([^]]+)\]/g
这在PHP中工作得很好[http://sdgdssd.com fghdfhdhhd]
但是当我使用这个正则表达式的javascript它与这个输入字符串不匹配
我的意见是 [http://sdgdssd.com fghdfhdhhd]
在JavaScript正则表达式中,您必须始终转义]
字符类的内部:
\[([^\]\s]+).([^\]]+)\]
请参阅正则表达式演示
JS解析[^]
为*任何字符,包括正则表达式中的换行符,最后的字符类]
符号作为文字]
.
在这方面,JS正则表达式引擎偏离了POSIX标准,其中智能放置用于匹配[
和]
符号与括号表达式[^][]
.
如果
]
字符是第一个字符,则该字符被视为文字字符^
:[^]abc]
.
在JS和Ruby中,这不是那样的:
您可以将未转动的闭合支架放在开口支架后面,或者在否定插入符号后面.
[]x]
匹配一个结束括号或一个x
.[^]x]
匹配任何不是结束括号或x
.这在JavaScript中不起作用,JavaScript将其视为[]
始终无法匹配的空字符类,并且[^]
作为与任何单个字符匹配的否定空字符类.Ruby将空字符类视为错误.因此,JavaScript和Ruby都需要使用反斜杠转义括号,以将它们包含在字符类中作为文字.