給定任何電子郵件地址我只想留下第一個和最後兩個字符,並在@字符的左側和右側輸入4個星號。如何用gsub替換第一個和最後兩個字符的所有字符Ruby
最好的方式來解釋的例子:
[email protected]
變更爲lo****@****om
[email protected]
改變fo****@****de
如何使用GSUB辦呢?
給定任何電子郵件地址我只想留下第一個和最後兩個字符,並在@字符的左側和右側輸入4個星號。如何用gsub替換第一個和最後兩個字符的所有字符Ruby
最好的方式來解釋的例子:
[email protected]
變更爲lo****@****om
[email protected]
改變fo****@****de
如何使用GSUB辦呢?
**如果你想用一個固定數量的*
符號面膜,你可以YSE
'[email protected]'.sub(/\A(..).*@.*(..)\z/, '\1****@****\2')
# => lo****@****om
這裏,
\A
- 串錨的開始(..)
- 組1:第一2個字符.*@.*
- 比換行符字符其他儘可能多至任何0+字符最後@
後跟另一組0+字符以外的換行符(..)
- 組2:最後2個字符\z
- 字符串結尾。在replacment字符串\1
是指保持在第1組的值,\2
引用組2
值。如果你想掩蓋現有的字符,同時保持它們的數量,則可能考慮一種方法來捕捉你需要保持或過程,和操作sub
塊內的捕獲字符串的部分:
'[email protected]'.sub(/\A(..)(.*)@(.*)(..)\z/) {
$1 + "*"*$2.length + "@" + "*"*$3.length + $4
}
# => lo*********@*******om
詳細
\A
- 第1組捕獲任何2個字符(.*)
- - 第2組捕獲任何0+字符儘可能多地到最後的字符串(..)
的開始。 ...@
- @
char(.*)
- 第3組捕獲任何0+字符儘可能多至(..)
- 組4:最後兩個字符\z
- 字符串的結尾。請注意,在塊內部,$1
包含組1的值,$2
包含組2的值,依此類推。
使用gsub
與前瞻,看看隱藏的正則表達式模式:
'[email protected]'.gsub(/(?<=.{2}).*@.*(?=\S{2})/, '****@****')
=> "lo****@****om"
使用普通的紅寶石:
str.first(2) + '****@****' + str.last(2)
=> "lo****@****om"
也許[這](https://ideone.com/yquKpO)可能幫幫我。 –
這是完美的,謝謝! – bochen421