我是正则表达式的新手,我想做的是使用javascript解析我的输入,如下所述:
我可能会获得三种类型的输入:
someEmail@domain.com;anotherEmail@domain.com;
和
some name<someEmail@domain.com>;another name<anotherEmail@domain.com>;
或者它可能像
someEmail@domain.com;another name<anotherEmail@domain.com>;
我试图做的是将整个输入分开;这将给我一系列电子邮件,然后检查每个数组项:
我已经在尝试学习正则表达式了。如果有人给我正则表达式,我会很感激,如果它附带一个解释,所以我可以理解和学习。
干杯
答案 0 :(得分:1)
尝试这样的事情作为首发 - 避免使用复杂的正则表达式 - 如果您的输入符合所述形式,则不需要它:
str = 'someEmail@domain.com;another name<anotherEmail@domain.com>;someEmail@domain.com;anotherEmail@domain.com;some name<someEmail@domain.com>;another name<anotherEmail@domain.com>;test@test.com';
var splits = str.split(';');
for (var i = 0; i < splits.length; i++) {
if (splits[i].indexOf('<') == -1) {
$('#output').append(splits[i] + '<br>');
} else {
var address = splits[i].match(/<(.*?)>/)[1];
$('#output').append(address + '<br>');
}
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='output'></div>
&#13;
答案 1 :(得分:1)
分裂并不是一个坏主意。你甚至可以更进一步,完全避免使用另一个答案中提到的正则表达式,但是因为你特别询问了它们:
然后,您可以使用正则表达式(如
)检查数组中的每个条目/^([^<]+);/
将匹配任何仅包含非<
后跟;
和
/^.*<(.*)>;/
将匹配您的参赛作品可能具有的第二种形式。
您可以使用|
将这些组合成一个正则表达式,但我建议您只需测试两次以避免必须处理太多的捕获组。你甚至可以通过使用g
lobal修饰符来避免分裂部分,但同样,这会使事情变得更复杂,特别是如果你是正则表达式的新手。
请注意,这些示例与电子邮件地址的匹配程度要高得多,但检查它们是否真的有效并不容易。如果你想研究一下,关于它的问题就有很多问题。