[英]Regex find string by starts from
需要使用正則表達式編輯文本:
“isLarge: ‘aaaa bb-b ccc’”
到:
“'lg:aaaa lg:bb-b lg:ccc‘“
我已經找到了替換引號中所有空格的解決方案( https://regex101.com/r/ZrA1MP/1 ),但現在我只在字符串以“isLarge:”開頭時才需要這個正則表達式工作
您之前的正則表達式存在缺陷,因為它可以匹配以下字符串中的空格isLarge: aaaa bb-b ccc dd-d -ee',
。 以下正則表達式有效:
(?<=^isLarge: [^']*'[^']*) (?=[^']*'[^']*$)
(?<=^isLarge: [^']*'[^']*)
首先檢查空格前面是否有isLarge:
+ 任意數量的不是引號的字符然后是引號 + 任意數量的不是引號的字符引用。(?=[^']*'[^']*$)
然后它檢查它后面是否跟一個引號。reg = /(?<=^isLarge: [^']*'[^']*) (?=[^']*'[^']*$)/gm;
str = "isLarge: 'aaaa bb-b ccc dd-d -ee',\nisLarge: aaaa bb-b ccc dd-d -ee',\nisMedium: 'aaaa bb-b ccc dd-d -ee'";
r.test(str)
// true
str.replaceAll(r, " lg:").replaceAll("isLarge: ",'');
// "'aaaa lg:bb-b lg:ccc lg:dd-d lg:-ee',
// aaaa bb-b ccc dd-d -ee',
// isMedium: 'aaaa bb-b ccc dd-d -ee'"
如果模式不起作用,可能是因為正則表達式引擎不支持具有非固定寬度的后視。 解決方案是捕獲[^']*'[^']*
並在替換方案中再次顯示它,即:
(?<=^isLarge:)([^']*'[^']*) (?=[^']*'[^']*$)
然后在替換字符串中使用$1
來保留它,即: "$1 lg:"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.