假設我有一個電子郵件地址'[email protected]'。我想要替換'a'和'f'之間的所有字符,以便結果看起來像'a****[email protected]'。正則表達式替換字符串之間的字符
試圖用一個正則表達式來做到這一點,替代
str.replace(/^(.*?)@/gi, '*');
但結果是這樣的
*gmail.com
有沒有辦法做我需要什麼?
假設我有一個電子郵件地址'[email protected]'。我想要替換'a'和'f'之間的所有字符,以便結果看起來像'a****[email protected]'。正則表達式替換字符串之間的字符
試圖用一個正則表達式來做到這一點,替代
str.replace(/^(.*?)@/gi, '*');
但結果是這樣的
*gmail.com
有沒有辦法做我需要什麼?
我會使用一個replace
有一個回調,用戶中間部分也可以替換爲*
S:
這裏是 「外」 /^(.)(.*)([email protected][^@]*)$/
正則表達式是如何工作的:
^
- 比賽開始的字符串(.)
的 - 第1組:任何第一個字符(.*)
- 第2組:任何字符,直到到最後一個字符之前的字符([email protected][^@]*)
- 第3組:最後一個@
之前的一個字符,然後是@
,然後是除0123之外的任何0+字符達...$
- 串末的.replace(/./g, "*")
將只是*
更換任何字符。它只會在組2上完成。
您在評論中建議的正則表達式也應該起作用。
/(?!^).(?=[^@][email protected])/g
匹配任何字符,但換行不是第一個字符((?!^)
)和具有比@
後和@
其他1+字符。
var re = /(?!^).(?=[^@][email protected])/g;
document.body.innerHTML = "[email protected]".replace(re, "*");
有趣的方法。我將接受這一個,因爲您的解決方案可以在客戶端和服務器JavaScript環境中運行。我還發現這個正則表達式可以在節點中工作,但是使用前面和後面的表達式。 str.replace(/(?!^).(?=[^@][email protected])/ gi,'*') – Geuis
'(?!^)。(?= [^ @] + @)'只使用lookaheads並將在JavaScript中工作。它匹配任何字符,但匹配不是第一個字符('(?!^)')的換行符,並且它後面有@個以外的@ @字符和一個'@'。 –
這不是你的實際問題的答案,但我想挑戰你,你的想法不是一個好主意。最好用而不是來表示通過用相同數量的*
來替換內部字母的電子郵件地址的長度。最好使用固定數量的*
。
你似乎使用JavaScript,不具有後向斷言,在這種情況下,捕捉可能更容易理解了,所以我應該這樣做有一個常數來代替*
小號
str.replace(/^(.).*([email protected])/, '$1***$2')
謝謝,這實際上是一個非常好的主意,我正在使用它。雖然我不能接受你給我的問題的答案,對不起。 =) – Geuis
試試這個:^ [A-ZA-Z0-9#$%「* + - \/=^_'{|}〜!?(*?)。 @ – mba12
這是一個解決方案,我發現它在節點中完美工作。JS,但使用前瞻和後面。 str.replace(/(?!^).(?=[^@][email protected])/ gi,'*') – Geuis