RegEx:@之前的意思是什么(?

时间:2011-03-02 08:02:58

标签: regex javascript

我在我的应用程序中发现了一个奇怪的行为,正则表达式和@字符后跟(。
以下是我的.Net JScript改编语言的两个例子:

//Using .Net Regex class
echo(Regex.IsMatch(".DOMAIN.S", "^\\.DOMAIN\\.S(\\.\\w*|\\b)"));//True
echo(Regex.IsMatch(".DOMAIN.@", "^\\.DOMAIN\\.@(\\.\\w*|\\b)"));//False !!

//Using JScript syntax
var re = /^\.DOMAIN\.S(\.\w*|\b)/g;
echo(re.exec(".DOMAIN.S") != null); //Ok
re = /^\.DOMAIN\.@(\.\w*|\b)/g;
echo(re.exec(".DOMAIN.@") != null); //Null !!

删除(。\ w * | \ b)使测试正常。所以我解释@后跟a(在正则表达式中有特殊含义)。
1。它的含义是什么?
2。什么应该是好的表达?

非常感谢。
ED

2 个答案:

答案 0 :(得分:3)

Regex.IsMatch(".DOMAIN.@", "^\\.DOMAIN\\.@(\\.\\w*|\\b)")返回false,因为^\\.DOMAIN\\.@与整个字符串匹配,然后您正在寻找一个句点和单词字符,没有字符或单词边界。根据{{​​3}}:

  

有三种不同的立场   有资格作为单词边界:

     
      
  • 在字符串中的第一个字符之前,如果第一个字符是
      字符。
  •   
  • 在字符串中的最后一个字符之后,如果最后一个字符是
      字符。
  •   
  • 字符串中的两个字符之间,其中一个是单词   性格和另一个不是   字符。
  •   

at符号不是单词字符,因此第二个项目符号为false。

所以,要真正回答你的问题,at符号在Regex中并不特别。

答案 1 :(得分:1)

导致您出现问题的不是@,而是\b

\b匹配单词边界:".DOMAIN.S"末尾有一个,而".DOMAIN.@"末尾没有一个。{1}}。这解释了为什么你在第一种情况下获得匹配而不是第二种情况。