簡體   English   中英

如何正確構建具有后視功能的正則表達式?

[英]How to build a regular expression with lookbehind correctly?

我試圖通過搜索和替換行在 WebStorm 中制作一個替換 styles 的正則表達式,但是 5 個小時的努力沒有給出任何結果。

(?<!vw\()(-?[0-9]*\.?[0-9]+px)
padding: 25px 30px;
box-shadow: 0 vw(20px) vw(30px) rgba(10, 9, 3, 0.2);
border-radius: vw(20px);
margin-top: 10px;

期望所有以像素為單位的長度(例如20px )除了那些包裹在vw()中的行(例如vw(20px) )將被選中。 也就是說,不應選擇圖像中強調的那些線

在此處輸入圖像描述

僅僅排除匹配前面有“vw(”是不夠的,因為這可能只是意味着匹配可以在跳過一個數字之后開始一個 position,然后當然匹配前面有一個數字,而不是括號.

要解決此問題,還要求數字前面的字符不是數字、點或減號,因為那實際上應該是匹配數字的一部分 您可以使用第二個后視模式來執行此操作: (?<.[-.\d])

與您的問題無關,但如果您在兩個匹配相同事物(數字)的模式之間有一個可選部分(點),則會導致性能不佳。 要匹配十進制數,請將整個小數部分設為可選,而不僅僅是小數點:

(?<!vw\()(?<![-.\d])(-?\d*(?:\.\d+)?px)

regex101上查看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM