js正则基础小结
一、正则表达式的定义
正则表达式描述了一种字符串的匹配模式。可以用来检查一个字符串是否含有某种字串、或者将匹配的子串做替换或者从某个字符串中取出符合条件的子串等。
二、正则表达式中语法(特殊字符代表的含义)
1. \ 转意符
主要是转换意义。第一个是在\后面的字符不按照原来的意思去解释,比如/b/是匹配'b',但是当前面加上\,比如/\b/,就会转意去匹配一个单词的边界,也就是把原字符转成功能字符。第二个是将正则表达式的功能字符还原,比如'*'是匹配它前面的元字符0次或多次,/a*/匹配a,aa,aaa,加上\之后,就还原意思了,/a\*/,就只是匹配a*。
2. ^ 匹配开头
/^a/ 可以匹配 'an A',但是匹配不了 'An a'。因为 An a 是a结尾,不是一行的开头。
3. $ 匹配结尾
/b$/ 可以匹配 'Bn b',但是匹配不了 'bn B'。因为 bn B 是B结尾的,不是一行的结尾。
4. * 匹配前面元字符0次或者多次。
/ba*/ 可以匹配到字符b,ba,baa,baaaa.....
5. + 匹配前面元字符1次或者多次。
/ba+/ 可以匹配到字符ba,baa,baaaa......
6. ? 匹配前面元字符0次或者1次。
/b?/ 可以匹配到字符b,ba。
7. x|y 匹配x或者y
/a|d/ 可以从'a,b,c,d,e' 中匹配到a,d
8. {n} 精确的匹配n次
/aba{2}/ 匹配元字符2次,可以从'ababaaaba'匹配到'abaa'
9. {n,} 匹配n次或者n次以上
/aba{2,}/ 匹配元字符2次或者2次以上,可以从'ababaaaba'匹配到'abaaa'
10. {n,m} 匹配n-m次,至少n次,最多m次
/aba{2,3}/匹配元字符2-3次,可以从'ababaaaba'匹配到'abaaa'
11. [xyz] 字符集,匹配这个集合中任意一个字符。
/[ade]/ 匹配集合中任意一个字符,'abcdedsds'匹配到a,d,e,d,d
12. [^xyz] 字符集,不匹配这个集合中的任意一个字符。
/[^ade]/ 不匹配集合中的任意字符,'abcdedsds'匹配到b,c,s,s
13. \b 匹配一个单词的边界
/\bhello/匹配右边是单词的边界,'hello helloworld'匹配到hello,hello。
/\bhello\b/匹配左右两边是单词的边界,'hello helloworld'匹配到hello。
14. \B 匹配一个单词的非边界
/\Bhello/匹配右边是单词的非边界,'hello helloworld'没有匹配结果。
/hello\B/匹配左边是单词的非边界,'hello helloworld'匹配到hello。
15. \d 匹配一个数字字符 /\d/ == /[0-9]/
16. \D 匹配一个非数字字符 /\D/ == /^[0-9]/
17. \n 匹配一个换行符
/c\na/匹配字符串 中间夹着换行符
'abc
abc' 此时可以匹配到
'c
a' 中间有换行符。
18. \s 匹配一个空白符 一切有空白的地方。
19. \S 匹配一个非空白符 一切所谓的空白的地方取反。等于/[^\n\f\r\t\v]/
20. \w 匹配包含英文字母、数字、下划线
21. \W 匹配非英文字母、非数字,非下划线 如$
(x) 匹配x保存x在名为$1...$9的变量中
三、JS中正则对象-RegExp
js中定义了正则对象RegExp,配合字符串String的使用,可以执行强大的模式匹配和文本检索与替换函数的方法。
1.直接量定义
直接放在双斜线里面。
var pattern = /正则表达式/attributes;
比如: /\b java \b/gi
2.用正则对象RegExp对象定义
var re = new RegExp(pattern,[flags])
// pattern: 正则表达式
// flags: 正则表达式的参数 g:全文查找 i:忽略大小写 m:多行查找
// 比如 new RegExp("regexp","g")
四、正则的分组和引用
正则的()的作用
第一
把单独的项目分组成子表达式,以便可以像处理一个独立的单元。
/(ab|cd) + |ef) / 匹配的既可以是字符串 “ef”,也可以是字符串"ab" 或者 “cd” 的一次或多次重复。(ab|cd)可以作为单独的元进行处理。
第二
在完整的模式中定义子模式。一个主要作用是可以突出显示我们自己要看的部分,第二是可以利用子表达式的位置进行使用,它的位置是被计数的左括号的位置.
/[’ "] [^ ’ "]*[’ "]/ = /( [’ "] ) [^ ’ "] * \1/
五、正则对象的属性和方法
属性
$1…$9 如果它(们)存在,是匹配到的子串 。
方法,正则对象直接调用
//正则对象.exec(str) 执行查找,返回第一个查找到正则存在的结果的数组
/[0-9]/.exec('ere56');
// [0: "5",groups: undefined,index: 3,input: "ere56"]
// 正则.compile(正则) 重新编译正则表达式
var str="Every man in the world! Every woman on earth!";
patt=/man/g;
str2=str.replace(patt,"person");
document.write(str2+"<br />"); // Every person in the world! Every woperson on earth!
patt=/(wo)?man/g;
patt.compile(patt);
str2=str.replace(patt,"person");
document.write(str2); // Every person in the world! Every person on earth!
//正则.test(str) 方法用于检测一个字符串是否匹配某个模式。返回布尔值。
/[0-9]/.test(5) // true
六、支持正则表达式的 String 对象的方法
// 1. replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
// stringObject.replace(regexp/substr,replacement)
var time = "2018/09/01";
time.replace(/\//g,'-'); // "2018-09-01"
// 2. match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。它返回指定的值,而不是字符串的位置。
// stringObject.match(searchvalue)
var str = "zyhjoy";
str.match(/j|o/g); // ["j", "o"]
// 3. split() 方法用于把一个字符串分割成字符串数组。
// stringObject.split(separator) separator可以是字符串或者是正则表达式
var str = "zyhjoy";
str.split(/h/); // ["zy", "joy"]
- 学习了别人的知识做的笔记,也添加补充了知识点,为了自己学习的时候方便看和复习,如有雷同,纯属巧遇,如有冒犯请联系本人修改。
- 学习的博客地址为:https://www.jb51.net/article/43190.htm