簡體   English   中英

[^ \\ /:]的倒數| 正則表達式改進

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM