samulelin 2012-10-27
(?=X)X,通过零宽度的正lookahead。零宽度正先行断言,仅当子表达式X在此位置的右侧匹配时才继续匹配。例如,\w+(?=\d)表示字母后面跟数字,但不捕获数字(不回溯)
(?!X)X,通过零宽度的负lookahead。零宽度负先行断言。仅当子表达式X不在此位置的右侧匹配时才继续匹配。例如,\w+(?!\d)表示字母后面不跟数字,且不捕获数字。
(?<=X)X,通过零宽度的正lookbehind。零宽度正后发断言。仅当子表达式X在此位置的左侧匹配时才继续匹配。例如,(?<=19)99表示99前面是数字19,但不捕获前面的19。(不回溯)
(?(?>X)X,作为独立的非捕获组(不回溯)
(?=X)与(?>X)的区别在于(?>X)是不回溯的。例如被匹配的字符串为abcm
当表达式为a(?:b|bc)m是可以匹配的,而当表达式是a(?>b|bc)m时是不能匹配的,
因为当后者匹配到b时,由于已经匹配,就跳出了非捕获组,而不再次对组内的字符进行匹配。可以加快速度。
if (escape(str).indexOf("%u")!=-1). alert("不能含有汉字");else if(str.match(/\D/)!=null). alert('不能含有字母');