我在 php 中有这个函数:
$html_price = "text text 12 eur or $ 22,01 text text";
preg_match_all('/(?<=|^)(?:[0-9]{1,3}(?:,| ?[0-9]{3})*(?:.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9] *)?)(?:\ |)(?:\$|usd|eur)+(?=|$)|(?:\$|usd|eur)(?:| )(?:[0-9]{1,3}(?:,| ?[0-9]{3})*(?:.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9] *)?)/', strtolower($html_price), $price_array1);
print_r($price_array1);
现在我想在 javascript 中使用相同的正则表达式,但我有一个错误: 语法错误:量词无效
我的 JavaScript:
maxime_string = "((?<=|^)(?:[0-9]{1,3}(?:,| ?[0-9]{3})*(?:.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9] *)?)(?:\ |)(?:\$|usd|eur|euro|euros|firm|obro|€|£|gbp|dollar|aud|cdn|sgd|€)+(?=|$)|(?:\$|usd|eur|euro|euros|firm|obro|€|£|gbp|dollar|aud|cdn|sgd|€)(?:| )(?:[0-9]{1,3}(?:,| ?[0-9]{3})*(?:.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9] *)?))";
maxime_regex = new RegExp(maxime_string);
var text = "text text 12 eur or $ 22,01 text text";
var result = text.match(maxime_regex);
var max = result.length;
alert(result.length);
for (i = 0; i < max; i++)
{
document.write(result[i] + "<br/>");
}
你能帮我吗?
最佳答案
JavaScript 不支持lookbehind - 这可能是你得到错误的地方。一些事情:
-
(?<=|^)
没有意义。这是一个向后查找,要求在此之前没有任何内容或字符串开始出现 - 这总是正确的。如果要匹配字符串开始,请使用单个^
. -
(?:.[0-9]*)?
- 我猜你想转义点,这样它就可以字面匹配 -
(?:\ |)
:您不需要转义空白。您应该将空白设为可选:“?
”,而不是选择“无”。 -
(?=|$)
与第一组一样有意义。 -
€
是一个损坏的 unicode 字符吗?
此外,您应该考虑使用正则表达式文字而不是 RegExp
带有字符串文字的构造函数 - 它会消耗一级反斜杠转义。看来您缺少 global 标志,因此您无法返回所有匹配项。试试这个:
var maxime_regex = /((?:[0-9]{1,3}(?:,| ?[0-9]{3})*(?:\.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9] *)?) ?(?:\$|usd|eur|euro|euros|firm|obro|€|£|gbp|dollar|aud|cdn|sgd|€)+|(?:\$|usd|eur|euro|euros|firm|obro|€|£|gbp|dollar|aud|cdn|sgd|€) ?(?:[0-9]{1,3}(?:,| ?[0-9]{3})*(?:\.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9] *)?))/g
这篇文章不包含任何理解、优化或缩短正则表达式怪物的努力
关于php - preg_match php 匹配 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16778208/