[英]The inverse of [^\/:] | Regular Expression Improvement
這個字符集
[^\/:] // all characters except / or :
每個jslint bc都比較弱,我應該指定可以使用的字符,而不是每個SO Post不能使用的字符。
這是用於一個簡單的非生產級域測試器,如下所示:
domain: /:\/\/(www\.)?([^\/:]+)/,
我只是在尋找有關如何思考此問題的方向。 帖子提到允許無數的Unicode字符不是一件好事...我如何制定計划來更好地編寫此代碼?
我不關心域檢查器的完整性(這只是一個原型)...我關心如何以不同方式編寫reg-exe。
根據http://en.wikipedia.org/wiki/Domain_name#Internationalized_domain_names
域名系統中允許的字符集基於ASCII
並按照http://www.netregister.biz/faqit.htm#1
為您的域名命名,您可以使用任何字母,0到9之間的數字和符號“-”(只要第一個字符不是“-”)
並考慮到您的域必須以.something結尾 ,您在尋找
([a-zA-Z0-9][a-zA-Z0-9-]*\.)+[a-zA-Z0-9][a-zA-Z0-9-]*
您知道的,這對Google來說是個很大的問題……但是只是為了弄清嘴巴:馬修·奧里丹(Matthew O'Riordan)編寫了這樣的正則表達式,無論使用或不使用協議,maces都可以鏈接。
這是他博客文章的鏈接
但是,為了將來參考,我也從此處提供正則表達式:
/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[.\!\/\\w]*))?)/
博客作家馬修(Matthew)親自將其細分為:
(
( # brackets covering match for protocol (optional) and domain
([A-Za-z]{3,9}:(?:\/\/)?) # match protocol, allow in format http:// or mailto:
(?:[\-;:&=\+\$,\w]+@)? # allow something@ for email addresses
[A-Za-z0-9\.\-]+ # anything looking at all like a domain, non-unicode domains
| # or instead of above
(?:www\.|[\-;:&=\+\$,\w]+@) # starting with something@ or www.
[A-Za-z0-9\.\-]+ # anything looking at all like a domain
)
( # brackets covering match for path, query string and anchor
(?:\/[\+~%\/\.\w\-]*) # allow optional /path
?\??(?:[\-\+=&;%@\.\w]*) # allow optional query string starting with ?
#?(?:[\.\!\/\\\w]*) # allow optional anchor #anchor
)? # make URL suffix optional
)
但是在對URL域進行數學計算的情況下, [^\\/:]
的否定可能只是:
[-0-9a-zA-Z_.]
並且應該匹配//后/第一個/之前的所有內容。 但是,如果您的網址不以斜杠結尾,會發生什么? 在那種情況下你會怎么做?
高位正則表達式(簡化)僅匹配一個字符,就像否定字符集一樣。 因此,這只會替換您使用的完整正則表達式中的否定集。
“我應該指定不能使用的字符,而不是不能使用的字符”
不,那是胡扯,只是JSLint是JSLint。
當您在正則表達式中看到[^\\/:]
,將立即知道它在做什么。 如果您嘗試列出所有可能的允許字符,則生成的正則表達式將非常難以閱讀,並且很容易意外忘記包含某些字符。
如果您有一組特定的允許字符,則可以列出它們。 這比嘗試列出所有可能的無效字符更容易,更可靠。
但是,如果您有一組特定的無效字符,則使用[^]
語法是合適的方法。
這是您可以擁有的字符的正則表達式:
mycharactersarecool[^shouldnothavethesechars](oneoftwooptions|anotheroption)
這是你在說什么嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.