条件正则表达式检索文本

时间:2015-11-03 10:31:10

标签: javascript regex

我是正则表达式的新手,我想做的是使用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>;
我试图做的是将整个输入分开;这将给我一系列电子邮件,然后检查每个数组项:

  1. 有&lt;和&gt;然后在&lt;之间检索文本。和&gt;作为价值。
  2. 没有&lt;和&gt;然后将整个文本作为值。
  3. 我已经在尝试学习正则表达式了。如果有人给我正则表达式,我会很感激,如果它附带一个解释,所以我可以理解和学习。

    干杯

2 个答案:

答案 0 :(得分:1)

尝试这样的事情作为首发 - 避免使用复杂的正则表达式 - 如果您的输入符合所述形式,则不需要它:

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:1)

分裂并不是一个坏主意。你甚至可以更进一步,完全避免使用另一个答案中提到的正则表达式,但是因为你特别询问了它们:

然后,您可以使用正则表达式(如

)检查数组中的每个条目
/^([^<]+);/

将匹配任何仅包含非<后跟;

的字符的内容
/^.*<(.*)>;/

将匹配您的参赛作品可能具有的第二种形式。

您可以使用|将这些组合成一个正则表达式,但我建议您只需测试两次以避免必须处理太多的捕获组。你甚至可以通过使用g lobal修饰符来避免分裂部分,但同样,这会使事情变得更复杂,特别是如果你是正则表达式的新手。

请注意,这些示例与电子邮件地址的匹配程度要高得多,但检查它们是否真的有效并不容易。如果你想研究一下,关于它的问题就有很多问题。