簡體   English   中英

正則表達式查找字符串從開始

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

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