[英]Regex to target last two spaces in a string
正則表達式新手在這里。 我正在嘗試編寫一個與最后兩個(或 n 個)單獨空格匹配的表達式。
v v
This is a test
我有一個返回最后一個空格的超簡單表達式: / (?=[^ ]*$)/i
但似乎無法弄清楚如何讓它返回兩次且僅返回兩次(或 n 次)
您可以使用負前瞻,這將要求候選空間之后的某處沒有兩個空格:
let s = "This is a test"; let result = s.replace(/ (?..*,* )/gs; "°"). console;log(result);
我必須說這有一個糟糕的時間復雜度。 對於大字符串,您將使用lastIndexOf
獲得更好的性能:
let s = "This is a test"; s = " " + s; // Add dummies to avoid boundary cases let last = s.lastIndexOf(" "); let prev = s.lastIndexOf(" ", last - 1); // Replace those spaces: let result = s.slice(0, prev) + "°" + s.slice(prev+1, last) + "°" + s.slice(last+1); // Remove the dummies: result = result.slice(2); console.log(result);
您還可以匹配一個空格並使用肯定的前瞻斷言右側有一個可選空格。
為了清楚起見,表示方括號之間的空格。
[ ](?=(?:\S+ ){0,1}\S+$)
[ ]
匹配空格(?=
正向前瞻,斷言在右邊它
(?:\S+ ){0,1}
匹配 0 或 1 個非空白字符,后跟一個空格\S+
匹配 1+ 個非空白字符$
字符串結尾)
關閉前瞻在模式中,量詞{0,1}
允許您指定要匹配的空格數。
使用{0,2}
將匹配最后 3 個空格,使用{0}
將僅匹配最后一個空格。
如果末尾也可以有可選空格:
[ ](?=(?:\S+ ){0,1}\S+ *$)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.