首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex匹配字符串(如果不匹配)

Regex匹配字符串(如果不匹配)
EN

Stack Overflow用户
提问于 2016-03-04 15:14:51
回答 2查看 85关注 0票数 0

我使用regex替换html文件中的图像源urls。

例如,我希望将img/替换为<?= $folder ?>/img/

问题:当我多次运行regex时,它将再次替换img/,创建:

代码语言:javascript
复制
<?= $folder ?>/<?= $folder ?>/img

..and等。是否有一种方法可以告诉regex替换img/ (如果不是<?= $folder ?>/img )?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-04 16:36:00

如果您喜欢regex,请尝试:

代码语言:javascript
复制
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/")

输出:

代码语言:javascript
复制
Old string: <?= $folder ?>/img/
New string: <?= $folder ?>/img/

Old string: img/
New string: <?= $folder ?>/img/
票数 2
EN

Stack Overflow用户

发布于 2016-03-04 16:00:36

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

在开头的位,(?!< ... )是负回顾的表示法,也就是说,用于检查...是否在字符串的前面。在这种情况下,我们将检查字符串是否

<\?= $folder \?> (注意转义问号)在字符串的前面。如果在前面使用img/的行中找到该部分,它将被拒绝,并且将不匹配。因此,每一种情况的img/将只匹配一次。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35799488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档