2015-11-03 51 views
0

我是新来的正则表达式和我想做的事就是解析我在下面的输入使用JavaScript的解释:有条件的正则表达式来检索文本

有3种类型的输入,我可能会得到:

[email protected];[email protected]; 

some name<[email protected]>;another name<[email protected]>; 

,或者它可能会像

[email protected];another name<[email protected]>; 

我想要做的是将整个输入分开;这将会给我发送电子邮件的数组,然后检查每个数组的那些项目:

  1. 有<和>然后检索文本<之间>的值。
  2. 没有<>然后将整个文本作为值。

我已经在尝试学习正则表达式。如果有人给我正则表达式,我会很感激,如果它有一个解释,所以我可以理解和学习。

干杯

+0

不要试图写出“完美”的正则表达式来匹配一个电子邮件地址,这是浪费时间。所有你需要的是在arobase和'>',';'之前排除'<','@',';'和空格,以及后面的空格。使用https://regex101.com/进行尝试。 –

+0

@Reeno因为我是新手,所以不值得在这里发帖。我会尝试regex101.com来了解它。 –

+0

@CasimiretHippolyte谢谢你,我会研究一下 –

回答

1

尝试这样的事情作为首发 - 避免了复杂的正则表达式 - 它不是必需的,如果你输入的形式表示:

str = '[email protected];another name<[email protected]>;[email protected];[email protected];some name<[email protected]>;another name<[email protected]>;[email protected]'; 
 
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>'); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id='output'></div>

+0

我同意你关于不使用复杂正则表达式的观点,感谢代码,尽管如果我想要使用非正则表达式,但是可以使用它的混合方法比那更干净。再次感谢。 –

1

分割不一个坏主意。你甚至可以更进一步,干脆避免在另一个答复中提到的正则表达式,但既然你特别问他们:

然后,您可以检查您的阵列中的每个条目用正则表达式像

/^([^<]+);/ 

这将匹配任何只包含未<后跟一个;

/^.*<(.*)>;/ 

这将匹配第二个表格条目可能具有的任何字符。

您可以使用|将这些组合成单个正则表达式,但我建议您只进行两次测试以避免处理太多的捕获组。你甚至可以通过使用 lobal修饰符来避免分裂部分,但是再一次,它会使事情变得更加复杂,特别是如果你对正则表达式不熟悉的话。

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

+0

谢谢你的真棒回复。我会试一试,我很确定我会从中学到一些东西。谢谢。投了票 –