【问题标题】:preg_match php to match javascriptpreg_match php 匹配 javascript
【发布时间】:2013-05-27 17:48:54
【问题描述】:

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

你能帮帮我吗?

【问题讨论】:

  • javascript 正则表达式中没有 ?&lt;= 的后视
  • @bokonic:你应该这样回答。那以及 OP 没有正确转义反斜杠的事实。

标签: php javascript regex preg-match match


【解决方案1】:

JavaScript 不支持lookbehind - 这可能是你得到错误的地方。一些事情:

  • (?&lt;=|^) 毫无意义。这是一个向后看,要求在此之前没有任何内容或字符串开始 - 这总是正确的。如果要匹配字符串开头,请使用单个^
  • (?:.[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

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

【讨论】:

  • 您不需要将文字传递给RegExp 构造函数;它已经是一个 RegExp 对象
  • @bokonic:这当然是我的意思。编辑澄清:-)
  • @user2411447:那个问题是?
  • 如果我想找到 22,3 $ 脚本返回 3 $ ,我想要“22,3 $”,在 php 中使用 preg_match 它正在工作,我认为这是昏迷的问题
  • "… 22,3 $ …".match(maxime_regex) 是否 为我返回Array ["22,3 $"]?请提供明确的输入和预期的输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 2022-01-09
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多