鍍金池/ 問答/HTML5  HTML/ 正則,用了問號依舊貪婪匹配問題

正則,用了問號依舊貪婪匹配問題

var str='第一個視頻<iframe frameborder="0" width="640" height="498" src="https://v.qq.com/iframe/player.html?vid=a0678a3ahqx&tiny=0&auto=0" allowfullscreen=""></iframe>第二個視頻<iframe frameborder="0" width="640" height="498" src="https://v.qq.com/iframe/player.html?vid=a0678a3ahqx&tiny=0&auto=0" allowfullscreen=""></iframe>沒有了'
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%"
于是就寫上上述正則,發(fā)現(xiàn)如果字符串里只有一個iframe是成功替換的,但是如果有2個iframe的話,就只會替換第2個iframe了.
求大神幫助,希望每個iframe里,width="640" height="498"變成width="100%"
圖片描述
在線調(diào)試地址http://jsbin.com/dumuxewubu/e...

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

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

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

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

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

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