鍍金池/ 問(wèn)答/HTML5  HTML/ 正則,用了問(wèn)號(hào)依舊貪婪匹配問(wèn)題

正則,用了問(wèn)號(hào)依舊貪婪匹配問(wèn)題

var str='第一個(gè)視頻<iframe frameborder="0" width="640" height="498" src="https://v.qq.com/iframe/player.html?vid=a0678a3ahqx&tiny=0&auto=0" allowfullscreen=""></iframe>第二個(gè)視頻<iframe frameborder="0" width="640" height="498" src="https://v.qq.com/iframe/player.html?vid=a0678a3ahqx&tiny=0&auto=0" allowfullscreen=""></iframe>沒(méi)有了'
var result=str.replace(/(<iframe) (.*) (width=\".*?\") (height=\".*?\") (.*)(<.*?iframe>)/g,"$1 $2 width='100%' $5 $6")
console.log(result)

我想把iframe里的width="640" height="498"用正則替換為width="100%"
于是就寫(xiě)上上述正則,發(fā)現(xiàn)如果字符串里只有一個(gè)iframe是成功替換的,但是如果有2個(gè)iframe的話,就只會(huì)替換第2個(gè)iframe了.
求大神幫助,希望每個(gè)iframe里,width="640" height="498"變成width="100%"
圖片描述
在線調(diào)試地址http://jsbin.com/dumuxewubu/e...

=============分割線,問(wèn)題解決啦======================================
發(fā)現(xiàn)之前用的非貪婪匹配方法加錯(cuò)了,不該用(.*)? 把問(wèn)號(hào)寫(xiě)在括號(hào)外,
用了這個(gè)就好了

var result=str.replace(/(<iframe) (.*?) (width=\".*?\") (height=\".*?\") (.*?)(<.*?iframe>)/g,"$1 $2 width='100%' $5 $6")
回答
編輯回答
清夢(mèng)

如果沒(méi)有性能要求的話(但和用jquery插入再改相比肯定快得多),可以用cheerio,就不用跟正則搞來(lái)搞去了(而且很安全)

import cheerio from 'cheerio';
var str='第一個(gè)視頻<iframe frameborder="0" width="640" height="498" src="https://v.qq.com/iframe/player.html?vid=a0678a3ahqx&tiny=0&auto=0" allowfullscreen=""></iframe>第二個(gè)視頻<iframe frameborder="0" width="640" height="498" src="https://v.qq.com/iframe/player.html?vid=a0678a3ahqx&tiny=0&auto=0" allowfullscreen=""></iframe>沒(méi)有了'
var $ = cheerio.load(str, {decodeEntities: false});
$('iframe').attr('width','100%')
console.log($.html())
2017年1月11日 17:26
編輯回答
澐染

解決啦,發(fā)現(xiàn)之前用的非貪婪匹配方法加錯(cuò)了,不該用(.*)? 把問(wèn)號(hào)寫(xiě)在括號(hào)外,
用了這個(gè)就好了

解決啦,發(fā)現(xiàn)之前用的非貪婪匹配方法加錯(cuò)了,不該用(.*)? 把問(wèn)號(hào)寫(xiě)在括號(hào)外,
用了這個(gè)就好了
var result=str.replace(/(<iframe) (.*?) (width=\".*?\") (height=\".*?\") (.*?)(<.*?iframe>)/g,"$1 $2 width='100%' $5 $6")
2018年6月6日 09:59