[英]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.