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

时间:2019-01-26 17:20:29

标签: javascript regex string

我是regex的新手,我不确定如何使用regex从非常大的字符串中提取测试。

假设字符串是这样的: 仅供参考:该字符串将动态生成,以从数据库和dom中提取不同的元素。我对其创建方式没有太多控制权。

  

Lorem ipsum dolor坐着,安全奉献精英。 Voluptas architecto dicta amet cumque,atque,labe eos nobis earum fuga tempore officiisexcepturi rerum placeat。 Perferendis,无花果叶蜂药,无花果类似物,必需品和类似品。 minimize()努力工作,除了留任。 Perferendis,无味的欧文汁,类似的必需品。

我需要获取跨度内包含itemprop标记为itemNum的文本。

我尝试了这个,但是对我不起作用:

def minimize(self):
    return minimize(self.rosen, self.x, method=self.method,
                    options={'xtol': self.xtol, 'disp': True})

最终我的变量中只有56789个。

谢谢大家。

4 个答案:

答案 0 :(得分:4)

如果不必使用正则表达式,则可以达到获取值的目的的一种方法是使用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)

答案 1 :(得分:1)

基于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);

答案 2 :(得分:0)

一个可能的解决方案。

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)

答案 3 :(得分:-1)

使用正则表达式在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);