JavaScript正则表达式中的懒惰匹配前端部分

时间:2018-01-16 08:49:10

标签: javascript regex

我有一个字符串

Steve Jobs steve.jobs@example.com somethingElse

我希望匹配steve.jobs@example.com somethingElse(前面的空格)

这是我的正则表达式(JavaScript)

\s.+?@.+

但现在它匹配Jobs steve.jobs@example.com somethingElse(前面的空格)

我知道我可以使用?懒惰匹配以下部分,但是如何懒惰匹配前部?

3 个答案:

答案 0 :(得分:1)

您还可以使用trimsplitpop

var output = "Steve Jobs steve.jobs@example.com ".trim().split(" ").pop();

正则表达式解决方案

您可以使用trimmatch

var output = "Steve Jobs steve.jobs@example.com ".trim().match( /[\w.]+@[\w.]+/g )

正则表达式 - /[\w.]+@[\w.]+$/gi

修改

var output = "Steve Jobs steve.jobs@example.com somethingelse ".trim().match( /[\w.]+@[\w.]+/g )

<强>演示

var  regex = /[\w.]+@[\w.]+/g;

var input1 = "Steve Jobs steve.jobs@example.com ";
var input2 = "Steve Jobs steve.jobs@example.com somethingelse ";

var fn = (str) => str.trim().match(regex);

console.log( fn(input1) );
console.log( fn(input2) );

答案 1 :(得分:1)

.可以是任何字符,包括空格。

通常,电子邮件不包含空格。 (虽然它实际上允许在2 ")之间

因此,您可以更改正则表达式,以便在\S之前和之后查找非空格@
它可能很贪心。

一个空格后跟一个或多个非空格和一个@以及一个或多个非空格。然后用空格和其他东西:

\s(\S+@\S+)(?:\s+(\S+))?

答案 2 :(得分:0)

电子邮件中允许的字符是;

*0-9* | *a-z* | *. - _*

它也必须有@符号。

所以我们的正则表达式必须以允许的字符开头,

[a-zA-z0-9-_.]

必须继续@符号;

[a-zA-z0-9-_.]+@

然后它可以以.com或包含点

的任何内容结束
[a-zA-z0-9-_.]+@[a-zA-z0-9.]+