正则表达式匹配域名

时间:2016-11-30 08:25:24

标签: javascript regex match

我需要将域名与字符串匹配。具有三种不同的模式。

var str=" with http match http://www.some.com and normal website type some.com and with www.some.com  ";
var url = /(http|ftp|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?/g;
console.log(str.match(url))

以上代码段仅与http://www.some.com匹配。

但我需要配三种类型。

  1. http://www.some.com
  2. www.some.com
  3. some.com
  4. 帮我找到结果。我在正则表达式中表现不佳。我从堆栈溢出中得到这个正则表达式模式。但不满足于三个条件。

4 个答案:

答案 0 :(得分:2)

使用

(?:(http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&;:\/~+#-]*[\w@?^=%&;\/~+#-])?

这只是使http / ftp / ...可选(没有捕获?:

请参阅此处的示例:demo

或图形here

答案 1 :(得分:1)

如前所述,您可以使用()?使正则表达式的某些部分可选,例如:(http:\/\/)?(www\.)?(some\.com)。所以使用你的代码,也许是这样的:

var str=" with http match http://www.some.com and normal website type some.com and with www.some.com but matched http://----.-.-.-. and now will match ----.-.-.-.";
	var url = /((http|ftp|https):\/\/)?[\w-]*(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?/g;
	console.log(str.match(url))

但是您提供的正则表达式匹配"http://----.-.-.-."之类的字符串,并且通过此修改现在它将匹配----.-.-.-.,这不是您想要的。 如果您真的想要匹配URI,则需要使用不同的正则表达式。

以下是一些可帮助您改进此答案的资源: https://regex.wtf/url-matching-regex-javascript/

请参阅引用RFC的What is the best regular expression to check if a string is a valid URL?http://www.faqs.org/rfcs/rfc3987.html

注意:它们似乎都匹配"http://----.-.-.-.",所以也许你的正则表达式并没有更糟糕。

答案 2 :(得分:0)

要匹配Unicode字符,您应该使用以下字符:

(ftp:\/\/|www\.|https?:\/\/)?[a-zA-Z0-9u00a1-\uffff0-]{2,}\.[a-zA-Z0-9u00a1-\uffff0-]{2,}(\S*)

Demo here

答案 3 :(得分:-1)

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.CardView
        android:id="@+id/card"
        android:padding="4dp"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="#456345">

        <WebView
            android:id="@+id/web"
            android:layout_width="match_parent"
            android:layout_height="200dp" />

    </android.support.v7.widget.CardView>

</LinearLayout>