用于捕获图像src属性的正则表达式

时间:2019-05-20 17:25:05

标签: javascript regex regex-lookarounds regex-group regex-greedy

我正在尝试提取双引号内的所有图像链接。

我可以使用

来获取引号内的文本
/"([^"]*)"/

但是我只想获取与以下模式匹配的值

"https://text/text/.../text.jpg?text=text&text=..."

(...表示相似的值)

我该如何实现?

3 个答案:

答案 0 :(得分:2)

如果网址必须以http和可选的s开头,并且必须包含.jpg,则可以使模式更具体:

"(https?:\/\/[^"\s]+\/\S+?\.jpg[^"\s]*)"
  • "(匹配开头“并开始捕获组
    • https?:\/\/将http与可选的s和://
    • 匹配
    • [^"\s]+不匹配“或空格字符
    • \/\S+?\.jpg匹配正斜杠,非空格char non greedy和.jpg的1倍以上
    • [^"\s]*匹配0+次而不是空格字符或“以匹配文件扩展名后面的内容
  • )"关闭捕获组并匹配关闭“

Regex demo

let pattern = /"(https?:\/\/[^"\s]+\/\S+?\.jpg[^"\s]*)"/;
[
  '"https://text/text/.../text.jpg?text=text&text=..."',
  '"https://text/text/.../text.jpg?t&ext=text&text=..."',
  '"https://text/text/.../text.jpg?text=text"'
].forEach(s => console.log(s.match(pattern)[1]))

答案 1 :(得分:0)

/['"]+/g 

应该工作

let urlStr= "https://text/text/........./text.jpg?text=text&text=.......';
console.log(urlStr.replace(/['"]+/g, ''));

答案 2 :(得分:0)

您的试用期非常好。在这里,我们还可以使用一个简单的左右"边界并收集介于两者之间的数据:

"(.+?)"

Demo

const regex = /"(.+?)"/gm;
const str = `"https://text/text/........./text<b>.jpg?text=text&text=.......</b>"`;
const subst = `$1`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);