正则表达式
^表示开头,$表示结尾
/\bis\b/ \b表示单词边界
三个标识符
g:global 全局
i: ignore case 忽略大小写
m:multiple lines 多行搜索
元字符
原义文本字符
元字符 在正则表达式中有特殊意思的非字母字符
字符类
可以使用[]来构建一个简单的类,类是符合某些特征的对象
表达式[abc]把字符a或b或c归为一类
‘a1b2c3d4‘.replace(/[abc]/g,‘x‘)
结果 x1x2x3d4
字符类取反
使用^创建,意思是不属于某类的内容
[^abc]表示不是字符a,b或c的内容
范围类
[a-z]表示从a到z任意字符,包含a和z
[]内部可以连写,如[a-zA-Z]
如果要匹配‘-‘,写在后面加一个就行了,如[a-z-]
JS预定义类
字符 |
等价类 |
含义 |
. |
[^\r\n] |
除了回车符和换行符之外的所有字符 |
\d |
[0-9] |
数字字符 |
\D |
[^0-9] |
非数字字符 |
\s |
[\t\n\x0B\f\r] |
空白符 |
\S |
[^\t\n\x0B\f\r] |
非空白符 |
\w |
[a-zA-Z_0-9] |
单词字符(字母、数字、下划线) |
\W |
[^a-zA-Z_0-9] |
非单词字符 |
边界
字符 |
含义 |
^ |
以xxx开始 |
$ |
以xxx结束 |
\b |
单词边界 |
\B |
非单词边界 |
量词
字符 |
含义 |
? |
以xxx开始 |
+ |
以xxx结束 |
* |
单词边界 |
{n} |
非单词边界 |
{n,m} |
出现n到m次 |
{n,} |
至少出现n次 |
贪婪模式
\d{3, 6} 匹配 12345678 会匹配6个
正则会尽可能多的匹配
非贪婪模式
让正则尽可能少的匹配,也就是说一旦成功匹配不再继续尝试
做法很简单,在量词后加?就可以,如:
\d{3,6}? 匹配 12345678 会匹配3个
分组
使用()可以达到分组的功能,使量词作用于分组
如 cat{3}会匹配cattt (cat){3}会匹配catcatcat
或
使用 | 达到或的效果 例 /Cat|Dog/
反向引用
$捕获组内容,例:’2018-05-25’.replace( (/d{4}) - (/d{2}) - (/d{2}) /g,’$2-$3-$1’)
结果为 ’05-25-2018’
忽略分组
不希望捕获某些分组,只需要在分组内加上 ?: 就可以
如: ( ?:Cat )(Dog) 此时$1是Dog
前瞻
正则从文本头部解析,所以文本尾部方向称为“前”,文本头部称为“后”
前瞻就是正则匹配到规则时,向前检查是否符合断言
JS不支持后顾。符合特定断言称肯定/正向匹配,反之则称否定/负向匹配
正向前瞻 expc(?=assert) 例:’a2*3’.replace(/w(?=\d)/g,’X’) //X2*3
负向前瞻 expc(?!assert) 例:’a2*3’.replace(/w(?!\d)/g,’X’) //aX*X
字符串对象与正则表达式相关方法
返回第一个匹配结果index,查找不到返回-1
忽略g,不执行全局查找,总是从字符串的开始进行检索
检查字符串,找到一个或多个与regex匹配的文本
是否有g标志会对结果产生影响
非全局调用(无 g): 返回值与exec()返回值类似
全局调用(有 g): 没有找到匹配项会返回null、
找到了一个或多个匹配子串,则返回一个数组
没有index、input属性
常用为字符串分割为数组
参数也可以是正则
如 ‘a1b2c3’.split(/\d/g) //[‘a’,’b’,’c’]
function参数含义
Function会在每次匹配的时候调用,有四个参数
网上随便找了个例子,懒得换了:
1 var reg=new RegExp("(http://www.qidian.com/BookReader/)(\\d+),(\\d+).aspx","gmi"); 2 var url="http://www.qidian.com/BookReader/1017141,20361055.aspx"; 3 var rep = url.replace(reg,function(){var args = arguments; 4 return args[1]+"showBook.aspx?bookId="+args[2]+"&chapterId="+args[3] 5 }); 6 console.log(rep); //http://www.qidian.com/BookReader/showBook.aspx?bookId=1017141&chapterId=20361055
原文:https://www.cnblogs.com/limcislimc/p/9091197.html