我有一个字符串
Steve Jobs steve.jobs@example.com somethingElse
我希望匹配steve.jobs@example.com somethingElse
(前面的空格)
这是我的正则表达式(JavaScript)
\s.+?@.+
但现在它匹配Jobs steve.jobs@example.com somethingElse
(前面的空格)
我知道我可以使用?
懒惰匹配以下部分,但是如何懒惰匹配前部?
答案 0 :(得分:1)
您还可以使用trim
,split
和pop
var output = "Steve Jobs steve.jobs@example.com ".trim().split(" ").pop();
正则表达式解决方案
您可以使用trim
和match
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.]+