① (?<name>exp)  匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
② (?=exp)  匹配exp前面的位置
③ (?<=exp)      匹配exp后面的位置
④ (?!exp)  匹配后面跟的不是exp的位置
⑤ (?<!exp)      匹配前面不是exp的位置①、③,⑤貌似有语法错误。②和④ 求具体例子,以及详细的说明。

解决方案 »

  1.   

    (?!1)\d*   这个匹配 不以1开头的数字
    (?!1|2)\d* 这个匹配 不以1或2开头的数字问题就是 (?=exp)了,  不了解  
    尤其是(?=exp)和(?!exp)组合来匹配字符串的头尾部分,不知道怎么写了。所以这里主要是求(?=exp) 以及(?=exp)、(?!exp)组合的例子。 
    顺便问问①、③,⑤是不是真的有语法错误?因为那个检测正则表达式的工具是我自己写的,用的javascript。
      

  2.   

    ①(pattern) 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。 
    ②(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。 
    ③(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 
    ④(?!pattern) 负向预查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始  没见过(?<=exp),(?<!exp)这样的写法
      

  3.   


    lz   听说过“过客”没有,对于在这里,学习正则的人来说 ,不知道的话,可就有点遗憾了。给:http://blog.csdn.net/lxcnn/article/details/4304754
    肯定对你有帮助。
    另外祝你:早成正则大道!!
      

  4.   

    ① (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
    ② (?=exp)  匹配exp前面的位置
    ③ (?<=exp) 匹配exp后面的位置
    ④ (?!exp)  匹配后面跟的不是exp的位置
    ⑤ (?<!exp) 匹配前面不是exp的位置首先 javascript不支持1 3 5 即命名分组、逆序环视。
    其次 断言的作用是做一次预查,预判断。比如
    ^(?!a)abc
    在匹配"bcdef"的时候
    首先从开始进行匹配,当走到(?!a)的时候先判断"bcdef"中的b位置是否是a,如果是,则匹配失败,本例中是b而不是a,所以(?!a)没有匹配,所以负断言就成立,接下来开始匹配abc,这个时候还是从b的位置开始匹配(重点:断言是不占据匹配字符的,因此又叫零宽断言),本正则本身是个矛盾的正则,所以不可能匹配。具体的,可以参考《精通正则表达式》一书,或楼上所说过客的正则博客。都是非常优秀的资料
      

  5.   

     顶楼上正则表达式在不同的语言下,所支持的语法也不同
    如JS就不支持命名捕获组和逆序环视对正则支持最好的还是。NET
      

  6.   

    理解了!
    只是我还想问一个, 捕获到的字符串能不能放到javascript的变量里面去?比如: /^(\d{0,10}) (\d{0,10}) (\d{0,10})$/ 这个匹配一个外国人名字,假如我想拿到他的first name 放到变量 fname里面,怎么做?有直接的方法吗?
    这个,间接的思路倒是有,比如substr()、substring()、replace()之类的。中午结贴...
      

  7.   

    var str = 'Zheng Yi Jian';
    var reg = /^(\S+)\s*(\S+)\s*(\S+)$/;
    var m = reg.exec(str);
    alert(m[1]);举个例子吧
    具体的方法很多 这个应该算简单的。