【问题标题】:Can't match '£' (pound sterling) in javascript regex在 javascript 正则表达式中无法匹配“£”(英镑)
【发布时间】:2023-03-18 07:57:02
【问题描述】:

我正在应用这个正则表达式:

a = new window.RegExp('(£...)');

到 XMLHttprequest 的响应文本:

d= a.exec(Xml.responseText);

其中 'Xml.responseText' 是一个字符串,其中包含以下页面的 html 源代码:

http://www.amazon.co.uk/gp/aw/d/B0050IIVNK

到目前为止,我已经能够使用相同的代码毫无问题地匹配此页面中的任何表达式。但是当匹配字符 '£' 时,'d' 变为 'null'(这不应该因为页面中至少有两个这些字符。

有人知道为什么会这样吗?

谢谢。

编辑:通过搜索 MelanciaUK 建议的编码值 \xa3 解决了问题,谢谢。

【问题讨论】:

  • 您是否尝试搜索编码值而不是符号?
  • 您确定可以从亚马逊访问responseText 吗?听起来像是同源策略问题
  • 这是一个chrome扩展,我已经设置了亚马逊的所有权限。
  • 我会试试你的观点 Melancia
  • 也许有帮助:encodeURIComponent('£'); "%C2%A3" 还有'£'.charCodeAt(0); // 163 所以你可能也想要£。此外,£ 是 HTML 中的 字符实体

标签: javascript regex


【解决方案1】:

问题不是来自你的正则表达式,你可以用静态字符串自己检查:

a = new window.RegExp('£...');
d= a.exec("This ring costs £205.50 but I only can spend £150 today.");
// ["£205"]

但我会使用更好的方法来检索金额:

/*
    (
        £         # £ symbol
        \d+       # followed by 1+ number
        (?:       # non-captured group
            \.    # a dot
            \d+   # followed by 1+ number, for decimals
        )?        # decimals are optional
    )
*/
var regex = /(£\d+(?:\.\d+)?)/g;
var input = "This ring costs £205.50 but I only can spend £150 today.";

console.log(input.match(regex)); //["£205.50", "£150"] 

编辑:按照 Bergi 的建议更改为正则表达式文字以提高可读性

【讨论】:

  • 为什么不使用正则表达式文字?
  • 我按照原来的例子。使用 RegExp 对象会影响首选项吗?
猜你喜欢
  • 1970-01-01
  • 2013-07-26
  • 2016-04-07
  • 2022-08-17
  • 2014-02-16
  • 2011-11-29
  • 2012-09-22
  • 1970-01-01
相关资源
最近更新 更多