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