我在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中使用相同的正则表达式,但我有一个错误: SyntaxError:无效的量词
我的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/>");
}
你能帮助我吗?
答案 0 :(得分:6)
JavaScript不支持lookbehind - 这可能是你收到错误的地方。有些事情:
(?<=|^)
毫无意义。这是一个外观要求要么在此之前没有任何东西或字符串开始 - 它总是如此。如果您想匹配字符串start,请使用单个^
。(?:.[0-9]*)?
- 我想你想逃离这个点,所以它与字面意思相符(?:\ |)
:你不需要逃避空白。而不是替代“没有”,你应该只选择空白:“ ?
”。(?=|$)
与第一组一样有意义。€
是一个破解的unicode角色?此外,您应该考虑使用正则表达式文字而不是带有字符串文字的RegExp
构造函数 - 它会使用一级反斜杠转义。而且您似乎错过了全球标志,以便您获得所有匹配。试试这个:
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
这篇文章不包括任何理解,优化或缩短正则表达式怪物的努力