我使用regex替换html文件中的图像源urls。
例如,我希望将img/替换为<?= $folder ?>/img/
问题:当我多次运行regex时,它将再次替换img/,创建:
<?= $folder ?>/<?= $folder ?>/img..and等。是否有一种方法可以告诉regex替换img/ (如果不是<?= $folder ?>/img )?
我正在尝试/^(?:(?!<?= $folder ?>/img).)*$/,但不确定如何第一次匹配并检查它是否已经包含<?= $folder ?>/img
发布于 2016-03-04 16:36:00
如果您喜欢regex,请尝试:
function matchIfNot(str) {
var newstr = str.replace(/^(?!(<\?=\s\$folder\s\?>\/))(img\/)/g, "<?= $folder ?>/img/")
alert("Old string: " + str + "\nNew string: " + newstr)
}
matchIfNot("<?= $folder ?>/img/")
matchIfNot("img/")
输出:
Old string: <?= $folder ?>/img/
New string: <?= $folder ?>/img/
Old string: img/
New string: <?= $folder ?>/img/发布于 2016-03-04 16:00:36
试试/(?!<\?= $folder \?>)img\//。
在开头的位,(?!< ... )是负回顾的表示法,也就是说,用于检查...是否在字符串的前面。在这种情况下,我们将检查字符串是否
<\?= $folder \?> (注意转义问号)在字符串的前面。如果在前面使用img/的行中找到该部分,它将被拒绝,并且将不匹配。因此,每一种情况的img/将只匹配一次。
对于出现多个img/的行,此正则表达式将失败。可能有一种允许多次发生的方法,但它可能是一个非常长的正则表达式;在我看来,通常当正则表达式太长时,可能是切换到另一个工具的时候了。
https://stackoverflow.com/questions/35799488
复制相似问题