我需要将域名与字符串匹配。具有三种不同的模式。
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
匹配。
但我需要配三种类型。
http://www.some.com
www.some.com
some.com
帮我找到结果。我在正则表达式中表现不佳。我从堆栈溢出中得到这个正则表达式模式。但不满足于三个条件。
答案 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*)
答案 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>