preg_match php匹配javascript

时间:2013-05-27 17:48:54

标签: php javascript regex preg-match match

我在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/>");
} 

你能帮助我吗?

1 个答案:

答案 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

这篇文章不包括任何理解,优化或缩短正则表达式怪物的努力