Regex Replace仅适用于Last Match
Regex Replace only working on Last Match
我正在尝试用纯文本替换许多图像html元素的src(在浏览器中呈现之前)。
以下是我目前拥有的
var base = './images';
var sample = '<p><img src="1.png" alt="image-1"></p><p><img src="2.png" alt="image-1"></p><p><img src="3.png" alt="image-1"></p>';
sample = sample.replace(/(<img.+src=")(?!http:'/'/)(.*?)"/g, '$1' + base + '/$2"');
$('pre').text(sample);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre></pre>
但是,它只替换了最后一个图像元素的src。我在这里错过了什么?
<img.+src
中的贪婪匹配捕获第一个img
和最后一个src
之间的所有内容;因此,您的$1
是
<img src="1.png" alt="image-1"></p><p><img src="2.png" alt="image-1"></p><p><img src="
更改为非贪婪匹配:
sample = sample.replace(/(<img.+?src=")(?!http:'/'/)(.*?)"/g, '$1' + base + '/$2"');
var base = './images';
var sample = '<p><img src="1.png" alt="image-1"></p><p><img src="2.png" alt="image-1"></p><p><img src="3.png" alt="image-1"></p>';
sample = sample.replace(/(<img.+?src=")(?!http:'/'/)(.*?)"/g, '$1' + base + '/$2"');
$('pre').text(sample);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre></pre>
作为注释中的@elcranrs metions,您在这里似乎使用了错误的方法。通过jQuery等在DOM中更改它似乎是一种更合适的方法。
话虽如此,如果出于某种原因,这是解决它的合适方法(我不知道所有的变量),你应该通过使RegEx更明确来解决它。贪婪匹配通常表现最好,必须使用懒惰评估(非贪婪)通常表明您的RegEx不够具体,或者您正在使用RegEx来解决不应该使用RegEx解决的问题。这应该在一定程度上起到了作用:
var base = './images';
var sample = '<p><img src="1.png" alt="image-1"></p><p><img src="2.png" alt="image-1"></p><p><img alt="image-1" src="3.png"></p>';
sample = sample.replace(/(<img[^>]+src=")(?!http:'/'/)([^"]+)"/g, '$1' + base + '/$2"');
$('pre').text(sample);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre></pre>
不过,我并不完全确定代码标记是否正确。还在学习使用这些
相关文章:
- node.js是否具有'match()'方法如果是,语法是什么
- Last.fm API发送2个曲目时,我要求一个,如果我正在听一首歌
- Regex Replace仅适用于Last Match
- 如何格式化match()参数以定位电子邮件中的字符串
- 哪个更有效-$('selecter').last()或$(')selecter:last'
- Reg Ex Match Failing
- 在页面内执行一个javascript函数作为last
- 如何使用match返回字符串中的字符
- Javascript match
- jQuery last child和insetBefore不起作用
- JavaScript-删除last();工作不正常
- Chrome扩展插件:runtime.last运行tabs.get/tabs.remove时出错:没有id为0的选项卡
- JavaScript RegEx Match Failing
- 如何使用正则表达式(.match())拆分字符串
- Javascript .match() 在使用 /gi 标志时不起作用
- 使用 JavaScript Regex 将“First.Last@example.com”变成“flast”
- Javascript性能:如何在数组中循环并检查每个值比indexOf、search和match更快
- 无法使用addEventListener Last参数(事件捕获)
- 使用“.match()”分隔大括号{}内的数据
- TypeError:format.match不是矩angularJS中的函数