繁体   English   中英

正则表达式匹配字符串(如果不是)

[英]Regex match string if not

我正在使用正则表达式替换html文件中的图片源网址。

我想以例如更换img/<?= $folder ?>/img/

问题:当我多次运行正则表达式时,它将再次替换img/ ,从而创建:

<?= $folder ?>/<?= $folder ?>/img

..等等。 有没有办法告诉正则表达式替换img/如果尚未<?= $folder ?>/img

我正在尝试/^(?:(?!<?= $folder ?>/img).)*$/但不确定如何首先匹配并检查它是否还不包含<?= $folder ?>/img

如果您更喜欢正则表达式,请尝试:

 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/

尝试/(?!<\\?= $folder \\?>)img\\//

开头的位(?!< ... )是负向后看的表示法,即检查...是否在字符串中更早。 在这种情况下,我们正在检查字符串
<\\?= $folder \\?> (注意转义的问号)在字符串的前面。 如果该部分较早在img/的行中找到,它将被拒绝,并且将不匹配。 因此, img/每种情况将仅匹配一次。

对于多于一次img/行,此正则表达式将失败。 也许有一种方法可以允许多次出现,但是它可能是一个很长的正则表达式。 在我看来,通常当正则表达式过长时,可能是时候切换到其他工具了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM