【问题标题】:Using lookarounds to find a match javascript使用环视查找匹配的 javascript
【发布时间】:2014-04-04 19:11:00
【问题描述】:

我正在尝试使用正则表达式从文本中提取 ID。例如 05771292000P 来自:

<div class="product-price-container">     <a href="/rca-32-class-720p-60hz-led-hdtv-with-built-in-dvd-player-led32b30rqd/226660215" class="product-link subject-price" data-external-product-id="05771292000P">    <span class="save-story-box">   

尝试使用正则表达式 (?=id=").*"&gt;,但它在 id 之后返回任何单词,这没有帮助。

知道我做错了什么吗?

【问题讨论】:

  • 不考虑使用合适的解析器? (?= ... ) 是向前看的,你在这里像向后看一样使用它(javascript 不支持向后看)。 id="([^"]*)" 会稍微好一点。
  • id="([^"]*)" 返回 id="05771292000P"。我只需要 05771292000P,这就是我尝试使用环视的原因。
  • 那么,看看this question

标签: javascript regex regex-lookarounds


【解决方案1】:

试试

var text = '<div class="product-price-container">     <a href="/rca-32-class-720p-60hz-led-hdtv-with-built-in-dvd-player-led32b30rqd/226660215" class="product-link subject-price" data-external-product-id="05771292000P">    <span class="save-story-box">'
text.match(/data-external-product-id="([0-9A-Za-z]+)"/)[1]

match(...) 返回一个数组,其中整个匹配作为第一个元素,您的组匹配(即[0-9A-Za-z]+)作为第二个元素。如果您可以信任获取文本的来源,您还可以使用 jQuery (here the code on jsFiddle):

var text = '<div class="product-price-container">     <a href="/rca-32-class-720p-60hz-led-hdtv-with-built-in-dvd-player-led32b30rqd/226660215" class="product-link subject-price" data-external-product-id="05771292000P">    <span class="save-story-box">'

var id = $($.parseHTML(text)).find("a").attr("data-external-product-id")

alert(id) // 05771292000P

请记住,每个人都可以使用$.parseHTML 执行恶意 JavaScript,前提是他可以控制已解析的文本。因此,如果您可以控制已解析的文本,请仅使用上述解决方案。

【讨论】:

    【解决方案2】:

    试试这个正则表达式:
    id="([0-9A-Za-z]+)"

    【讨论】:

    • 同上面的评论。这将返回 id="05771292000P",我需要 05771292000P。无论如何谢谢:)
    • () 用于捕获价值。当您执行 var result = regex.exec(yourString); 时,它将返回 05771292000P;这里的结果将是一个数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2020-04-06
    相关资源
    最近更新 更多