參考連接:正則表達式
http://www.regexlab.com/zh/deelx/syntax.htmspa
正則表達式問號特殊用法:htm
1、在表示重複的字符後面加問號,好比+?,*?,{2,3}?能夠中止匹配的貪婪模式。get
/*string
* 結果"aaa";貪婪模式下會盡量多的匹配,console
* 因此會匹配3個重複的字符co
*/字符
var pattern = /\w{2,3}/;ab
console.log("aaaa".match(pattern)[0]);tar
/*
* 結果"aa";加問號後會儘量少的匹配重複次數,
* 因此匹配到了2個重複的字符
*/
var pattern2 = /\w{2,3}?/;
console.log("aaaa".match(pattern2)[0]);
2、在分組內使用?:能夠產生沒有編號的分組,好比
/* 結果"ab_";匹配到的字符被第一個分組(ab)
* 替換
*/
var pattern = /(ab)\w+(ba)/;
console.log("abcba_".replace(pattern, "$1"));
/*
* 結果"ba_";第一次分組內加入了?:,產生的是一個
* 沒有編號的分組,因此$1匹配的字符是第二個分組,
* 也就是第一個編號分組(ba)相匹配的文本內容
*/
var pattern2 = /(?:ab)\w+(ba)/;
console.log("abcba_".replace(pattern2, "$1"));
3、(?=)和(?!);順序確定環視和順序否認環視
/* 前兩個結果是["string"],後兩個結果是null;
* str(?=ings)ing/匹配"string",r後面的位置右邊必須跟
* 上ings;和/string(?=s)/同樣;匹配"string";g後面的位置
* 的右邊必須跟一個s。"string_x"雖然也含有"string"可是
* 不知足(?=...)括號內的條件
*/
var pattern=/str(?=ings)ing/;
console.log("strings.a".match(pattern));
console.log("strings.a".match(/string(?=s)/));
console.log("string_x".match(pattern));
console.log("string_x".match(/string(?=s)/));
/* (?!...)某位置右邊不能有!後匹配的字符,
* string(?!s)/匹配"string","g"後不能跟"s"
*/
var pattern=/string(?!s)/;
console.log("strings".match(pattern));//null
console.log("string.".match(pattern));//["string"]