[^/:]|正则表达式改进的倒数

The inverse of [^/:] | Regular Expression Improvement

本文关键字:倒数 正则表达式      更新时间:2023-09-26

此字符集

[^'/:] // all characters except / or :

根据jslint b.c.,它很弱。我应该指定可以使用的字符,而不是不能根据这个SO Post使用的字符。

这是一个简单的非生产级别的域测试仪,看起来像这样:

domain:         /:'/'/(www'.)?([^'/:]+)/,

我只是在寻找一些方向来思考这个问题。帖子提到,允许使用无数的Unicode字符不是一件好事。。。我该如何制定一个写得更好的计划?

我不关心我的域检查器的完整性(它只是一个原型)。。。我关心的是如何以不同的方式编写reg exes

根据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-]*

"我应该指定可以使用的字符,而不是不能使用的字符"

不,那是胡说八道,只是JSLint是JSLint。

当您在正则表达式中看到[^'/:]时,它的作用就显而易见了。如果您试图列出所有可能的允许的字符,则生成的正则表达式将非常难以读取,并且很容易意外忘记包含一些字符。

如果您有一组特定的允许字符,那么可以列出它们。这比试图列出所有可能的无效字符更容易、更可靠。

但是,如果您有一组特定的无效字符,[^]语法是正确的方法。

这里有一个正则表达式,用于您可以拥有的字符:

mycharactersarecool[^shouldnothavethesechars](oneoftwooptions|anotheroption)

这就是你在说的吗?

这对谷歌来说是一个很好的问题,你知道。。。但这只是为了弄湿你的嘴:Matthew O'Riordan写了这样一个正则表达式,无论有没有协议,数学都会联系起来。

这是他的博客文章的链接

但为了将来参考,让我在这里提供帖子中的正则表达式:

/((([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_.]

这应该与//之后和第一个//之前的所有内容相匹配。但是当你的网址没有以斜杠结尾时会发生什么呢?那样的话你会怎么办?

上正则表达式(简化)只匹配一个字符,就像负字符集一样。因此,这只是在您使用的完整reg ex中替换您的负集。