今日寡人終於搞明白了js正則中的「多行匹配」

此前由於搞不懂js正則表達式中的「m」有何作用,因此在做「正則替換小工具」時,是把目標文本用\n分割之後,for循環逐個匹配的。

現在終於get到了正確的做法,默認加入「gm」這兩個flag,則可以使行首^行末$生效。

代碼量減少了很多,非常優雅。

如果要匹配每一行的第一個,則用以下方法:

^(.*?)使用,$1來玩

可以使每行第一個出現的「使用」替換成「來玩」。

對比前後代碼

之前的代碼:

let text_target_arr = tmp.split("\n");
let text_rst = "";
for (let x = 0; x < text_target_arr.length; x++) {
 text_rst += text_target_arr[x].replace(rgvalue, replace_target);
 if (x < text_target_arr.length - 1) {
  let nmatch = text_target_arr[x].match(rgvalue);
  if (replace_n || nmatch == null) {
   text_rst += "\n";
  }
 }
}
tmp = text_rst;

改進後的代碼:

tmp = tmp.replace(rgvalue, replace_target)

確實非常優雅!

Leave a Comment