0

我有很多这样的模式字符串

/ucwa/oauth/v1/applications/101507538841/people/adan.maddox@dc.com/presence

我如何使用正则表达式来获取电子邮件adan.maddox@dc.com

我试过这段代码,它可以工作,但我觉得这不是一个好方法。

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

3 回答 3

6

您的方式可能会始终如一地工作。如果您正在寻找一个或多或少等效的正则表达式以使其更清晰,它可能是:

var re = /\/people\/([^/]+)\/presence/;
var email = re.exec(myString)[1];
于 2013-09-29T00:07:06.633 回答
2

使用匹配

var str = "/ucwa/oauth/v1/applications/101507538841/people/adan.maddox@dc.com/presence";
var n = str.match(/[A-Za-z\.]+@[A-Za-z\.]+/);

http://jsfiddle.net/SnZxP/

于 2013-09-29T00:05:54.893 回答
0

以下是有点节省:

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

这样,您的电子邮件地址的模式并不重要,您不必担心电子邮件地址在字符串中的位置......

这可能最适合您的模式。

如果您想从您的模式中提取多个电子邮件地址,您甚至可以选择:

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

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

var str = 'ucwa/oauth/v1/applications/101507538841/\"very\".unusual"@strange.example.com/people/adan.maddox@dc.com'

会给你带来一个数组:

[""very".unusual"@strange.example.com", "adan.maddox@dc.com"]

见:http: //jsfiddle.net/SnZxP/2/

于 2013-09-29T00:24:59.323 回答