有几个不太经常使用的正则表达式:
(?:)、(?=exp)、(?!exp)、(?<=exp)、(?<!exp)
请问这几个正则表达式怎样使用啊?
书上说是匹配位置的,看了半天还是不怎么明白,
希望高手来解答一下,谢谢了!!!

解决方案 »

  1.   


    JS只支持这3个(?:)、(?=exp)、(?!exp) 如果书上就告诉你是匹配位置的..那这书也太破了吧?
      

  2.   

    正则只能如此!L@_@K// yyyy: 1000-2999
    // MM: 01-12
    // dd: 01-31
    var regyyyyMMdd = /^[12]\d{3}(0\d|1[0-2])([0-2]\d|3[01])$/;document.write("20091021", ": ", regyyyyMMdd.test("20091021"), "<br />");
    document.write("20093121", ": ", regyyyyMMdd.test("20093121"), "<br />");
    document.write("20091321", ": ", regyyyyMMdd.test("20091321"), "<br />");
    document.write("20090331", ": ", regyyyyMMdd.test("20090331"), "<br />");
    document.write("20090332", ": ", regyyyyMMdd.test("20090332"), "<br />");
      

  3.   

    (?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
     
    (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
     
    (?!pattern) 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始  
      

  4.   

    “(?:)”称为非捕获组,与捕获组“( )”意思一样均表示一组,但是“( )”在匹配完后会将其中的数据保留在内存中,以便于反向引用,而“(?:)”在匹配完成后就直接丢弃了,并不会保存起来。有兴趣的话可以看看这些帖子,这些帖子是 Java 的,不过正则表达式的意思是一样的:http://topic.csdn.net/u/20080627/14/8a91b33a-f35c-4303-85b5-e0a8da462202.html
    http://topic.csdn.net/u/20080325/17/fb7a3e8d-029a-4d8e-89ae-77a9d28ec301.html
    http://topic.csdn.net/u/20080716/22/80cdd418-a0e9-4e7e-8435-df6d4bc11c4a.html
      

  5.   

    (?:Exp) 非捕获组,参考正则基础之——非捕获组 其余几个属于环视,JavaScript中不支持(?<=Exp)和(?<!Exp)
    Java中虽然支持(?<=Exp)和(?<!Exp),但Exp中不能出现不定长度的量词,量词只支持“?”
    .NET和PHP中全部支持,且支持Exp中出现长度不定的量词,如“*”、“+”、“{m,n}”等
    参考
    正则基础之——环视 
      

  6.   

    参考一下:快速掌握JavaScript正则表达式  http://www.w3cgroup.com/article.asp?id=202
      

  7.   

    (?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号 
    字符串:Mytest,正则:My(?:test),不会增加分组以及捕获test,结果为Mytest。
    (?=exp) 匹配exp前面的位置 
    字符串:Mytest,正则:My(?=test),获取test之前的匹配内容,结果为My
    (?<=exp) 匹配exp后面的位置 
    字符串:Mytest,正则:(?<=My)test,获取My之后的匹配内容,现找到My,但是不包含在结果中,结果为test
    (?!exp) 匹配后面跟的不是exp的位置 
    字符串:Mytest,正则:My(?!test),因为My之后是test,所以没有匹配结果。
    (?<!exp) 匹配前面不是exp的位置