var reg = /regexp/
var reg = new RegExp('regexp')
/regexp/i
/regexp/ig
),或者做为第二个参数传进去(new RegExp('regexp', 'ig')
)。//下面的例子演示了各类标志的用法,以及它们是如何影响模式匹配的:
var pattern = /orange/;
console.log(pattern.test("orange")); // true
var patternIgnoreCase = /orange/i;
console.log(patternIgnoreCase.test("Orange")); // true
var patternGlobal = /orange/ig;
console.log(patternGlobal.test("Orange Juice")); // true
复制代码
任何非正则表达式字符或操做符的字符序列,表明的都是该字符自己:
var parttern = /orange/;
咱们不多采用严格匹配,由于这和直接比较两个字符串没什么分别。严格匹配有时候也 叫做简化模式(simple pattern)。正则表达式
若是想匹配一组字符,能够放到[]中来。例如[abc]就表示a,b,c中的任意一个字符。数组
var pattern = /[abc]/;
console.log(pattern.test('a')); //true
console.log(pattern.test('d')); //false
复制代码
也能够在模式开头加一个^(脱字符)来表示不想匹配到的内容。浏览器
var pattern = /[^abc]/;
console.log(pattern.test('a')); //false
console.log(pattern.test('d')); //true
复制代码
这种模式还有另外一种很重要的用法是用来指明值的范围。若是想匹配字符或数字的某个连续 范围,可使用下面的模式:bash
var pattern = /[0-5]/;
console.log(pattern.test(3)); //true
console.log(pattern.test(12345)); //true
console.log(pattern.test(9)); //false
console.log(pattern.test(6789)); //false
console.log(/[0123456789]/.test("This is year 2015")); //true
复制代码
咱们能够看到:[ , ] , ^ , $ , .等字符都是具备特殊含义的字符。那要配配它们的字面量的含义,要怎么作?
加一个\(反斜线字符)
就行了。[ 匹配的就是一个普通的字符[, 而不是字符组的开括号。双\\
表示一个普通的字符 \ 。函数
能够看到两种方法结果是一致的。查找不到的时候则返回null。学习
var strToMatch = 'Blue is your favorite color ? blue?';
var regExAt = /Blue/ig;
console.log(strToMatch.replace(regExAt, "Red"));
//输出:Red is your favorite color ? Red?
复制代码
或者,第二个参数接受一个函数:ui
var strToMatch = 'Blue is your favorite color ?';
var regExAt = /Blue/;
console.log(strToMatch.replace(regExAt, function(matchingText){
return 'Red';
}));
// 输出"Red is your favorite color ?"
复制代码
var sColor = 'sun,moon,Stars';
var reComma = /[n,s]/i;
console.log(sColor.split(reComma));
//输出: ["", "u", "", "moo", "", "", "tar", ""]
复制代码
var strToMatch = 'wooden bat, smelly Cat,a fat cat';
var re = /[bcf]at/gi;
var arrMatches = strToMatch.match(re);
console.log(arrMatches);
//输出:["bat", "Cat", "fat", "cat"]
复制代码
var strToMatch = 'i1,i2,i3,i4,i5,i6,i7,i8,i9';
var re = /i[0-5]/gi;
var arrMatches = strToMatch.match(re);
console.log(arrMatches);
//输出:["i1", "i2", "i3", "i4", "i5"]
复制代码
写法 | 含义 |
---|---|
\d | 任意的单个数字字符 |
\w | 任意的单个字母或数字字符 |
\s | 任意的单个空白字符(空格、制表符、换行符等) |
\D | 任意的单个非数字字符 |
\W | 任意的单个非字母或数字字符 |
\s | 任意的单个非空白字符 |
. | 除换行符以外的任意单个字符 |
var strToMatch = '123-456-7890';
var re = /\d\d\d-\d\d\d/;
var arrMatches = strToMatch.match(re);
console.log(arrMatches);
//["123-456"]
复制代码
写法 | 含义 |
---|---|
? | 出现0次或1次(将模式视为可选的) |
* | 出现0次或屡次 |
+ | 出现1次或屡次 |
{n} | 只出现n次 |
{n,m} | 出现n到m次 |
{n, } | 至少出现n次 |
{ ,n} | 出现0到n次 |
//非子串:
console.log(/cat/.test('a black cat')); //true
//子串:
console.log(/cat/.test('a blackcat')); //true
复制代码
下面是使用了 \b
之后的例子:this
//非子串:
console.log(/\bcat/.test('a black cat')); //true
//子串:
console.log(/\bcat/.test('a blackcat')); //false
console.log(/\bcat/.test('a cataa')); //true
console.log(/\bcat\b/.test('a blackcat')); //false
console.log(/\bcat\b/.test('a cat')); //true
复制代码
** \b 做用:** 上面的解释仍是有点模糊,\b表示的是字符与字符之间看不见的东西(空格)。
若是想匹配cat字符串的话,须要写成:/\bcat\b/
详细解释看下图:spa
exec的用法:
exec()方法在获取匹配信息方面颇有用,由于它会返回一个包含匹配信息的对象。exec() 返回的对象有一个index属性,能够告诉咱们成功匹配出如今字符串中的哪一个位置。这个功能在 很多地方都能派上用场:code
var match = /\d+/.exec("There are 100 ways to do this");
console.log(match);
// ["100"]
console.log(match.index);
// 10
复制代码
()组合符的用法:
选择结构可使用|(管道符)来表示。例如,/a|b/能够匹配字符a或b,/(ab)+|(cd)+/ 能够匹配一个或多个ab或cd。
咱们常常须要确保模式在字符串的首部或尾部进行匹配。当脱字符(^)用做正则表达式的 第一个字符的时候,能够将匹配过程锁定在字符串的开头,所以,/^test/只可以匹配出如今待 匹配字符串起始位置上的test子串。与此相似,美圆符号(/。
^和/。
在字符串String使用replace()方法时,可使用特殊的字符序列$1,$2...来表示对应的分组。
var orig = "1234 5678";
var re = /(\d{4}) (\d{4})/;
var modifiedStr = orig.replace(re, "$2 $1");
console.log(modifiedStr); // 输出"5678 1234"
复制代码
例如,模式\d+可以匹配一个或多个数字。若是字符串是123的话,贪婪匹配能够匹配到一、 12和123。贪婪模式h.+1能够匹配字符串hello中的hell——这是可以匹配的最长的字符串。 由于\d+是贪婪匹配,因此它会尽量多地匹配数字,故最后的匹配结果就是123。
与贪婪限定符相反,惰性限定符则是尽量少地匹配字符。能够在正则表达式后面加上问号 (?),使其成为惰性匹配。惰性模式h.?l能够匹配字符串hello中的hel—— 这是可以匹配到的最短的字符串。
模式\w*?X能够匹配到0个或多个单词以及一个X。可是*
后的?表示应该尽量少地匹配字 符。对于字符串abcXXX,匹配结果能够是abcX、abcXX或abcXXX,那究竟应该匹配哪个呢? 由于*?是惰性模式,因此应该尽量少地匹配,所以最后的匹配结果是abcX。
删除字符串首尾多余的空白字符是一个极其常见的用法。直到最近,String对象自己都没有 trim()方法,一些JavaScript库为没有String.trim()方法的旧浏览器提供了字符串修剪功能。 最经常使用的方法以下所示:
function trim(str) {
return (str || "").replace(/^\s+|\s+$/g,"");
}
console.log("--"+trim(" test ")+"--");
//"--test--"
//若是咱们想把重复的空白字符替换成单个呢?
re=/\s+/g;
console.log('There are a lot of spaces'.replace(re,' '));
//"There are a lot of spaces"
复制代码
在上面的代码片断中,咱们尝试匹配一个或多个空格字符序列,而后将其替换成单个空格。 如你所见,正则表达式就像是JavaScript兵器库中的一把瑞士军刀。从长远来看,细心学习、 充分实践,将为你带来丰厚的长期回报。