<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-U-Compatible" content="IE-edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>正则表达式</title>
</head>
<body>
<h1>正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)</h1>
<p>使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式</p>
<p>语法:/正则表达式主体/修饰符(可选)</p>
<p>实例: var patt = /runoob/ig</p>
<p>实例解析:/runoob/i 是一个正则表达式。</p>
<p> runoob 是一个正则表达式主体 (用于检索)。</p>
<p> ig 是修饰符 (i:搜索不区分大小写;g:搜索全局)。</p>
<h1>正则表达式中的特殊字符 字符 含意</h1>
<p> 做为转意,即通常在""后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后//,转意为匹配一个单词的边界。</p>
<p>对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了""后,/a*/将只匹配"a*"。</p>
<h1>正则表达式</h1>
<p>^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"</p>
<p>$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"</p>
<p>* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa</p>
<p>+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa</p>
<p>? 匹配前面元字符0次或1次,/ba*/将匹配b,ba</p>
<p>(x) 匹配x保存x在名为$1...$9的变量中</p>
<p>x|y 匹配x或y</p>
<p>{n} 精确匹配n次</p>
<p>{n,} 匹配n次以上</p>
<p>{n,m} 匹配n-m次</p>
<p>[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)</p>
<p>[^xyz] 不匹配这个集合中的任何一个字符</p>
<p>[] 匹配一个退格符</p>
<p> 匹配一个单词的边界</p>
<p>B 匹配一个单词的非边界</p>
<p>cX 这儿,X是一个控制符,/cM/匹配Ctrl-M</p>
<p>d 匹配一个字数字符,/d/ = /[0-9]/</p>
<p>D 匹配一个非字数字符,/D/ = /[^0-9]/</p>
<p>
匹配一个换行符</p>
<p>
匹配一个回车符</p>
<p>s 匹配一个空白字符,包括
,
,f, ,v等</p>
<p>S 匹配一个非空白字符,等于/[^
f
v]/</p>
<p> 匹配一个制表符</p>
<p>v 匹配一个重直制表符</p>
<p>w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[w]匹配"$5.98"中的5,等于[a-zA-Z0-9]</p>
<p>W 匹配一个不可以组成单词的字符,如[W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。</p>
<script type="text/javascript">
var str = 'Hello World! Nice to meet you.';
// 字符串方法中正则表达式的应用 replace search split match
var newStr = str.replace(/s/ig,'*'); // replace 如果不指定 g 全局,那么当替换第一个匹配到的字符串就会停止
console.log(newStr); // Hello*World!*Nice*to*meet*you.
console.log(str.search(/d/i)); // 没有找到数字 所以结果 是 -1
console.log(str.search(/w/i)); // 返回找到的第一个古河规则字符串的 索引 这里是 0
var arr = str.split(/s/i); // 空字符串分割
console.log(arr); // ["Hello", "World!", "Nice", "to", "meet", "you."]
// match 在字符串内搜索指定的值,匹配成功返回匹配成功的数组,无则返回 null
var tmpArr1 = str.match(/w/ig);
var tmpArr2 = str.match(/d/ig);
console.log(tmpArr1); // ["H", "e", "l", "l", "o", "W", "o", "r", "l", "d", "N", "i", "c", "e", "t", "o", "m", "e", "e", "t", "y", "o", "u"]
console.log(tmpArr2); // null
// 正则表达式对象的方法
var patt1 = /d/ig;
var patt2 = /w/ig;
// test() 检测字符串中是否包含定义字符,返回布尔
console.log(patt1.test(str)); // false
console.log(patt2.test(str)); // true
// exec() 检索字符串中指定的值,匹配成功返回数组,匹配失败返回 null
var tmp1 = patt1.exec(str);
var tmp2 = patt2.exec(str);
console.log(tmp1); // null
console.log(tmp2); // ["e", index: 1, input: "Hello World! Nice to meet you.", groups: undefined]
</script>
</body>
</html>