PHP正则表达式和javascript正则表达式有什么区别

2022-08-31 01:12:22

我在正则表达式中工作,我的正则表达式在PHP中工作得很好,但是当我将此正则表达式用于javascript时,它与此输入字符串不匹配/\[([^]\s]+).([^]]+)\]/g[http://sdgdssd.com fghdfhdhhd]

我的输入是[http://sdgdssd.com fghdfhdhhd]


答案 1

在 JavaScript 正则表达式中,您必须始终对字符类内部进行转义:]

\[([^\]\s]+).([^\]]+)\]

观看正则表达式演示

JS 解析为 *任何字符,包括正则表达式中的换行符,以及作为文字的最终字符类符号。[^]]]

在这方面,JS正则表达式引擎偏离了POSIX标准,其中智能放置用于匹配符号,并使用括号表达式(如.[][^][]

如果该字符是之后的第一个字符,则该字符被视为文字字符: 。]^[^]abc]

JS和Ruby中,这不是那样工作的:

您可以通过将未转义的右括号放在左括号之后或紧跟在否定插入符号之后来包含该右转括号。 与右方括号或 匹配。 匹配任何不是右括号或 .这在 JavaScript 中不起作用,JavaScript 将其视为始终无法匹配的空字符类,以及与任何单个字符匹配的否定空字符类。Ruby 将空字符类视为错误。因此,JavaScript 和 Ruby 都要求用反斜杠对右括号进行转义,以将它们作为文字包含在字符类中[]x]x[^]x]x[][^]

相关:


答案 2

我想补充一个关于在JavaScript正则表达式中翻译PHP正则表达式的小事实:preg_replace.replace

<?php preg_replace("/([^0-9\,\.\-])/i";"";"-1 220 025.47 $"); ?>
Result : "-1220025.47"

对于PHP,您必须使用正则表达式周围的引号,一个点逗号来用替换来分隔正则表达式,括号被用作重复研究(女巫根本不意味着同样的事情。"..."

<script>"-1 220 025.47 $".replace(/[^0-9\,\.\-]/ig,"") </script>
Result : "-1220025.47"

使用JavaScript,正则表达式周围没有引号,用逗号将正则表达式与替换分开,并且您必须使用选项才能说除了选项之外的多个研究(这就是为什么)。/g/i/ig

我希望这对某人有用!请注意,在(英语?)类型数字的情况下可能会被抑制:"\,""1,000.00 $"

<script>"-1,220,025.47 $".replace(/[^0-9\.\-]/ig,"")</script>
<?php preg_replace("/([^0-9\.\-])/i";"";"-1,220,025.47 $"); ?>
Result : "-1220025.47"