我正在处理正则表达式,我的正则表达式是 /\[([^]\s]+).([^]]+)\]/g
在PHP中对于 [http://sdgdssd.com fghdfhdhhd]
很好用,但当我在JavaScript中使用这个正则表达式时,它与这个输入字符串不匹配。
我的输入是 [http://sdgdssd.com fghdfhdhhd]
我正在处理正则表达式,我的正则表达式是 /\[([^]\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中不起作用,因为它将[]
视为始终无法匹配的为空字符类,而[^]
视为否定的空字符类,可以匹配任何单个字符。 Ruby将空字符类视为错误。 因此,JavaScript和Ruby都要求使用反斜杠对关闭括号进行转义,以将其包含为字符类中的字面值。
相关信息:
(?1)
用于缩短PCRE模式转换的正则表达式子程序 -从PHP到JS的REGEX]
,这很奇怪。我一直出于本能地进行转义,因为我认为如果不这样做,它会被卡住。 - chris85[
。 - Wiktor Stribiżewpreg_replace
正则表达式翻译成 JavaScript 的 .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"
/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"
/\[([^]\s]+).([^]]+)\]/g
可能有效,但在PHP中可能不行;PHP有不同于JS的修饰符。g
不是PHP的修饰符。 - chris85