2013-09-28 25 views
0

我有很多的字符串用這樣的如何使用正則表達式從這個字符串

模式/ucwa/oauth/v1/applications/101507538841/people/[email protected]收到電子郵件/存在

如何使用正則表達式來獲取電子郵件喜歡[email protected]

我嘗試這個代碼,它的工作,但我覺得這不是一個好辦法。

var y = myString.substring(0, myString.lastIndexOf("/presence")); 
    var email = y.substring(y.lastIndexOf("people/") + 7); 
+0

嘗試與此正則表達式匹配http://stackoverflow.com/questions/46155/validate-email-address-in-javascript – elclanrs

+0

@elclanrs謝謝,但我不需要驗證電子郵件地址,我只需要從這個模式中得到它們 – tito11

+0

同樣的事情,你可以使用相同的正則表達式來驗證和匹配,只需刪除開始和結束字符,它應該是好的。 – elclanrs

回答

6

你的方式可能會一致地工作。如果你正在尋找一個更或多或少相當於正則表達式,使之更加明確,它可能是:

var re = /\/people\/([^/]+)\/presence/; 
var email = re.exec(myString)[1]; 
+1

這更安全。大多數電子郵件正則表達式都被簡化,有時會出現誤報和漏報。因爲奇怪的東西就像這樣''非常。(),:; <> [] \「。非常。\」非常@ \ \ \「非常\」。異常「@ strange.example.com'是一個有效的[電子郵件地址](http://en.wikipedia.org/wiki/Email_address)。 –

+0

@KerryLiu:''別忘了「(評論)。+ @ [:: 1]' – Ryan

2

使用match

var str = "/ucwa/oauth/v1/applications/101507538841/people/[email protected]/presence"; 
var n = str.match(/[A-Za-z\.][email protected][A-Za-z\.]+/); 

http://jsfiddle.net/SnZxP/

+1

不幸的是,電子郵件可能更復雜(谷歌:電子郵件正則表達式)。如果元素的順序是固定的,@ minitech的解決方案可能是最好的。 – Tadeck

0

以下是位節省:

var str = "/ucwa/oauth/v1/applications/101507538841/people/[email protected]/presence"; 
var n = str.match(/[^\/]*@[^\/]*/); 

這種方式,模式的電子郵件地址無關緊要,您不必擔心電子郵件地址在您的字符串中的位置...

這可能最符合您的模式。

如果要提取一個或多個電子郵件地址,你的模式,你甚至可以去:

var n = str.match(/[^\/]*@[^\/]*/g); 

所以,即使是怪異的地址之前提到的:

var str = 'ucwa/oauth/v1/applications/101507538841/\"very\".unusual"@strange.example.com/people/[email protected]' 

會帶給你陣列:

[""very".unusual"@strange.example.com", "[email protected]"] 

參見:http://jsfiddle.net/SnZxP/2/