用正则表达式查找字符串html中的链接

时间:2018-07-16 06:36:46

标签: javascript html regex

我只需要在href中找到html字符串中的所有链接 双重qute(“”)或单个qute('')的情况

示例:

<a href='text'>

<div href="text">;

我想出

function findHrefValues(str) {
  let hrefs = [];
  let pattern = /href='([^']+)'/g;
  let match = pattern.exec(str);
  if(match && Array.isArray(match)) {
    match.forEach((href)=> {
      if(href) hrefs.push(href);
    });
  }
  return hrefs;
}

但效果不佳,无法识别双重古特语。

2 个答案:

答案 0 :(得分:3)

紧接'之后捕获第一个"href,然后使用字符集,该字符集包含通过反向引用包含相同引号的的所有内容,然后再次使用后向引用 来匹配href的结尾:

const str = `<a href='tex""t1'>
<div href="tex''t2">`;

function findHrefValues(str) {
  const re = /href=(['"])([^\1]+?)\1/g;
  const matches = [];
  let match;
  while ((match = re.exec(str)) !== null) {
    matches.push(match[2]);
  }
  return matches;
}

console.log(findHrefValues(str));

但是,如果可能的话,请不要使用任何正则表达式-而是使用DOMParser解析HTML字符串:

const str = `<a href='text1'>
<div href="text2">`;
const doc = new DOMParser().parseFromString(str, 'text/html');
const hrefs = Array.from(
  doc.querySelectorAll('[href]'),
  element => element.getAttribute('href')
);
console.log(hrefs);

答案 1 :(得分:0)

您可以使用

尝试使用此代码

let pattern=/href=('|")([^']+)('|")/g;