用于删除tld之后和空白之前的任何内容的JavaScript

时间:2015-05-30 15:30:18

标签: javascript regex

我有一堆函数正在将页面过滤到附加到电子邮件地址的域。除了一件小事之外,所有工作都很棒,有些链接是这样的:

  

EXAMPLE.COM
      EXAMPLE.ORG。
      EXAMPLE.ORG取代。
      EXAMPLE.COM"
      EXAMPLE.COM&#34 ;.
      EXAMPLE.COM)。
      EXAMPLE.COM(COMMENT)"
      DEPT.EXAMPLE.COM
      EXAMPLE.ORG
      EXAMPLE.COM。

我想弄清楚最后一个过滤器(正则表达式与否)将删除TLD之后的所有内容。所有这些项目都在一个数组中。

修改

我使用的功能:

function filterByDomain(array) {
    var regex = new RegExp("([^.\n]+\.[a-z]{2,6}\b)", 'gi');
    return array.filter(function(text){
        return regex.test(text);
    });
}

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式来匹配每种情况的TLD:

import scala.concurrent.Await
import scala.concurrent.duration._
Await.result(
  SlickDB().run(DBIO.seq(schema.create))
  , 10 seconds)

RegEx Demo

您的验证功能可以是:

/^[^.\n]+\.[a-z]{2,63}$/gim

PS:请阅读此Q & A to see that up to 63 characters are allowed in TLD.

答案 1 :(得分:0)

我匹配所有前导[\w.]并省略最后一个点,如果有的话:

var result = url.match(/^[\w\.]+/).join("");
if(result.slice(-1)==".") result = result.slice(0,-1);

请注意,\w应替换为更复杂的内容:

  • _\w集的一部分,但不应位于网址
  • -不属于\w,但可以在与.-
  • 不相邻的网址中

为了保持正则表达式简单且代码可读,我就是这样做的

  1. 在网址中替换_ # #_只能在TLD之后
  2. -替换为__属于\w
  3. 在正则表达式测试后,将_替换为-
  4. www.-example-.com之类的网址仍会通过,可以通过搜索[.-]{2,}

    来检测