php - preg_match php 匹配 javascript

标签 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 中使用相同的正则表达式,但我有一个错误: 语法错误:量词无效

我的 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/

相关文章:

php - 正则表达式 PHP 拆分数字和字符串

php - mysql长连接断开后续获取连接操作重复

javascript - 在 Ember-CLI 的应用程序初始化程序中注入(inject)?

javascript - this.state.something 发生变异并引发问题

javascript - 为什么检查 Firebase 中是否存在子项总是返回 false?

ruby - 如何使用 ruby​​ 正则表达式从标签中提取 href?

php - 1 个文件中的多个 SELECT 语句和 INSERTS

php - 确认/重定向功能不起作用 - javascript

php - 使用 foreach() 解析 XML 子项

javascript - 我如何用 Javascript 编写这个 urllize 函数?