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

时间:2015-12-07 13:28:40

标签: javascript php regex

我正在使用正则表达式我的正则表达式是/\[([^]\s]+).([^]]+)\]/g这在PHP [http://sdgdssd.com fghdfhdhhd]中运行良好 但是当我使用这个正则表达式的JavaScript时,它与这个输入字符串

不匹配

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

2 个答案:

答案 0 :(得分:7)

在JavaScript正则表达式中,您必须始终转义字符类中的]

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

请参阅regex demo

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

在这方面, JS正则表达式引擎偏离POSIX standard ,其中智能展示位置用于匹配[]带有括号表达式的符号,如[^][]

  

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

JS and Ruby中,这不是那样的:

  

您可以将未转动的闭合支架放在开口支架后面,或者在否定插入符号后面。 []x]匹配右括号或x[^]x]匹配任何不是右括号或x的字符。这在JavaScript中不起作用,JavaScript将[]视为始终无法匹配的空字符类,并将[^]视为与任何单个字符匹配的否定空字符类。 Ruby将空字符类视为错误。所以 JavaScript和Ruby都需要使用反斜杠转义括号括号,以将它们包含在字符类中作为文字。

答案 1 :(得分:1)

我想补充一点关于在JavaScript preg_replace正则表达式中翻译PHP .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"