【问题标题】:How to extract substring from a String with different values in Javascript?如何从 Javascript 中具有不同值的字符串中提取子字符串?
【发布时间】:2020-10-30 14:11:16
【问题描述】:

我有一段包含一些电子邮件、电话和 URL 的列表。

我想从单个字符串中提取所有 (600) 封电子邮件、电话和 URL。

我尝试在 Javascript 中使用 substr 来做到这一点,但我可能在某处丢失了。

这是我的示例数据示例:

*Email:info@abc.com
Url: www.example.com
Tel: +123-456-789
Email:info@abc.com
Url: www.example.com
Tel: +123-456-789
Email:info@abc.com
Url: www.example.com
Tel: +123-456-789
Email:info@abc.com
Url: www.example.com
Tel: +123-456-789*

请用 JavaScript 指导我。

var myEmail = [];
var ol = myS.substr((myS.indexOf("Email:")+1),(myS.indexOf('Url:')-2));
for(let i=0;i<600;i++){
   var ml = myS.substr((myS.indexOf(ol)+1),(myS.indexOf('Url:')-2));
console.log(ml);

}

【问题讨论】:

    标签: javascript dom data-extraction


    【解决方案1】:

    const data = `*Email:info@abc.com
    Url: www.example.com
    Tel: +123-456-789
    Email:info@abc.com
    Url: www.example.com
    Tel: +123-456-789
    Email:info@abc.com
    Url: www.example.com
    Tel: +123-456-789
    Email:info@abc.com
    Url: www.example.com
    Tel: +123-456-789*`;
    
    const reEmails = /^\*?Email: ?(.*@.*\..*)\*?$/gm;
    const reTels = /^\*?Tel: ?(\+?\d*-?\d*-?\d*)\*?$/gm
    const reUrls = /^\*?Url: ?(www\..*\..*)\*?$/gm
    
    const emails = data.match(reEmails).map(m => m.replace(reEmails, '$1'));
    const tels = data.match(reTels).map(m => m.replace(reTels, '$1'));
    const urls = data.match(reUrls).map(m => m.replace(reUrls, '$1'));
    
    console.log('emails:', emails);
    console.log('tels:', tels);
    console.log('urls:', urls);

    【讨论】:

      【解决方案2】:

      如果格式变化不大,有一个简单的解决方案。

      让我们用正则表达式分隔“单词”

      const email = `*Email:info@abc.com
      Url: www.example.com
      Tel: +123-456-789
      Email:info@abc.com
      Url: www.example.com
      Tel: +123-456-789
      Email:info@abc.com
      Url: www.example.com
      Tel: +123-456-789
      Email:info@abc.com
      Url: www.example.com
      Tel: +123-456-789*`;
      
      const matches = email.match(/[^ :\n]*/g);
      console.log(matches);
      

      现在我们可以过滤要求“@”出现

      const results = matches.filter( e => e.indexOf('@') !== -1 );
      console.log(results);
      

      【讨论】:

        猜你喜欢
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-21
        • 1970-01-01
        • 2012-10-24
        相关资源
        最近更新 更多