代码之家  ›  专栏  ›  技术社区  ›  Sergio

如何在javascript中使用正则表达式匹配带双引号的字符串

  •  0
  • Sergio  · 技术社区  · 7 年前

    我对regex非常陌生,我不知道如何使用regex从一个非常大的字符串中提取一段测试。

    仅供参考:此字符串将从数据库和dom中动态提取不同元素生成。我无法控制它是如何创建的。

    Lorem ipsum dolor sit amet,奉献精英。沃卢帕斯建筑大师的名言是:阿梅特·卡姆克、阿特克、拉伯尔·厄斯·厄尔·诺比斯·厄尔·福加(nobis earum fuga)临时办公楼除外。在这种情况下,工作人员可以自由地表达自己的意见,也可以说是必要的。 <span itemprop="itemNum">56789</span> 临时工作人员的工作地点除外。在这种情况下,工作人员可以自由地表达自己的意见,也可以说是必要的。

    我需要获取范围内的文本,该范围内的itemprop标记为itemNum。

    我试过这个,但对我不起作用:

    /\b(itemprop=\"sku\"")\b/g
    

    最终,变量中只有56789个。

    提前谢谢大家。

    4 回复  |  直到 7 年前
        1
  •  4
  •   Mathias W    7 年前

    如果不一定要使用regex,那么实现获取值的目标的一种方法是使用DOMParser首先解析字符串,然后使用 querySelect :

    const str = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas architecto dicta amet cumque, atque, labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis. <span itemprop="itemNum">56789</span> labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis.';
    
    const parser = new DOMParser();
    const doc = parser.parseFromString(str, "text/html");
    console.log(doc.querySelector('span[itemprop="itemNum"]').innerHTML)
        2
  •  1
  •   mexanichp    7 年前

    基于 https://stackoverflow.com/a/14210948/3999647 刚刚更新了正则表达式和输入

    function getMatches(string, regex, index) {
      index || (index = 1); // default to the first capturing group
      var matches = [];
      var match;
      while (match = regex.exec(string)) {
        matches.push(match[index]);
      }
      return matches;
    }
    
    
    // Example :
    var myString = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas architecto dicta amet cumque, atque, labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis. <span itemprop="itemNum">56789</span> labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis.';
    var myRegEx = /(<span itemprop="\w+">)(\d+)(<\/span>)/g;
    
    // Get an array containing the first capturing group for every match
    var matches = getMatches(myString, myRegEx, 2);
    
    // Log results
    document.write(matches.length + ' matches found: ' + JSON.stringify(matches))
    console.log(matches);
        3
  •  0
  •   Code Maniac    7 年前

    一个可能的解决方案。

    let str = `Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas architecto dicta amet cumque, atque, labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis. <span itemprop="itemNum">56789</span> labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis.`
    
    let op = str.match(/<[^>]+>([^<]+)<\/[^>]+>/g).map(e=>e.replace(/.*?>(.*)<.*/, "$1"))
    
    console.log(op)
        4
  •  -1
  •   kockburn    7 年前

    使用正则表达式查找 itemprop="itemNum"> </ 那就抓住两者之间的任何东西。

    const data = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas architecto dicta amet cumque, atque, labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis. <span itemprop="itemNum">56789</span> labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis.'
    
    const res = data
    .match(/(?<=itemprop\="itemNum"\>).+(?=\<\/)/)
    //returns an array... get first value
    .shift();
    
    console.log(res);