2016-05-10 136 views
2

假設我有一個電子郵件地址'[email protected]'。我想要替換'a'和'f'之間的所有字符,以便結果看起來像'a****[email protected]'。正則表達式替換字符串之間的字符

試圖用一個正則表達式來做到這一點,替代

str.replace(/^(.*?)@/gi, '*'); 

但結果是這樣的

*gmail.com 

有沒有辦法做我需要什麼?

+0

試試這個:^ [A-ZA-Z0-9#$%「* + - \/=^_'{|}〜!?(*?)。 @ – mba12

+0

這是一個解決方案,我發現它在節點中完美工作。JS,但使用前瞻和後面。 str.replace(/(?!^).(?=[^@][email protected])/ gi,'*') – Geuis

回答

1

我會使用一個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, "*");

+0

有趣的方法。我將接受這一個,因爲您的解決方案可以在客戶端和服務器JavaScript環境中運行。我還發現這個正則表達式可以在節點中工作,但是使用前面和後面的表達式。 str.replace(/(?!^).(?=[^@][email protected])/ gi,'*') – Geuis

+0

'(?!^)。(?= [^ @] + @)'只使用lookaheads並將在JavaScript中工作。它匹配任何字符,但匹配不是第一個字符('(?!^)')的換行符,並且它後面有@個以外的@ @字符和一個'@'。 –

2

這不是你的實際問題的答案,但我想挑戰你,你的想法不是一個好主意。最好用而不是來表示通過用相同數量的*來替換內部字母的電子郵件地址的長度。最好使用固定數量的*

你似乎使用JavaScript,不具有後向斷言,在這種情況下,捕捉可能更容易理解了,所以我應該這樣做有一個常數來代替*小號

str.replace(/^(.).*([email protected])/, '$1***$2') 
+1

謝謝,這實際上是一個非常好的主意,我正在使用它。雖然我不能接受你給我的問題的答案,對不起。 =) – Geuis