簡體   English   中英

正則表達式以字符串中的最后兩個空格為目標

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

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