2013-05-10 86 views
0

我必須解析(在JS中)最初的電子郵件地址,而不是@有一個點。顯然我想顯示@而不是點。Javascript lookbehind在第一場比賽中停止

var mail = "name.domain.xx" 

我們有兩種情況:

  1. 包含一些點本身和他們反斜線:

    name\.surname.domain.xx 
    
  2. 只包含常規字符(非點)

this話題我找到了一種方法來實現負回顧後,這是我做過什麼:

mail = mail.replace(/(\\)?\./, function ($0, $1) { return $1?$0:"@"; }); 

,但它不是在的情況下,因爲工作(1)它找到\。,它不會觸及它,當然它會停下來。

在另一端,如果我使用該選項,它也替代了第三個點得到name.surname @域名@ XX

現在,有沒有辦法說: 我想要查看整個字符串,但我想停在第一場比賽? 我希望我解釋一下自己。

乾杯

+1

那豈不是simplier只是更換倒數第二。爲@? 或者你還期望[email protected]和類似的? – kuncajs 2013-05-10 10:34:59

+0

是的,我也希望在域的一面 – valenz 2013-05-10 10:39:59

回答

0

我第一次回答你的問題時就誤會了。所以我改變了我的答案。

如果您沒有放置/ g標誌,它將會替換第一個匹配項,這意味着您可以查找第一個標點符號,並且前面沒有\。其次,您可以用常規標點符號替換屬於電子郵件用戶部分的所有\.

http://jsfiddle.net/GLVNY/2/

var emailSingle = 'myname.domain.com', 
    emailDouble = 'my\\.name\\.another\\.name.domain.com', 
    regAt = /([^\\])\./, 
    repAt = '[email protected]', 
    regPunct = /\\./g, 
    repPunct = '.'; 

emailSingle = emailSingle.replace(regAt, repAt).replace(regPunct, repPunct); 
emailDouble = emailDouble.replace(regAt, repAt).replace(regPunct, repPunct); 

alert('emailSingle: ' + emailSingle + '\nemailDouble: ' + emailDouble); 
+0

這是可能的,你只是不能取代所有\。只有第一。 – kuncajs 2013-05-10 10:45:37

+0

@ kuncajs這是可以做到的。 – thebreiflabb 2013-05-10 10:47:43

+0

@thebreiflabb:謝謝!它工作的很好,但我也必須照顧子域。在這一點上,我可能會保留原來的地址......解釋符號。 – valenz 2013-05-10 10:58:35

相關問題