簡體   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