preg_match php匹配javascript

0 javascript php regex match preg-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);
Run Code Online (Sandbox Code Playgroud)

现在我想在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/>");
} 
Run Code Online (Sandbox Code Playgroud)

你能帮助我吗 ?

Ber*_*rgi 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
Run Code Online (Sandbox Code Playgroud)

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