首页 > Web开发 > 详细

js正则表达式学习笔记

时间:2018-05-26 01:06:59      阅读:197      评论:0      收藏:0      [点我收藏+]

正则表达式

^表示开头,$表示结尾

/\bis\b/     \b表示单词边界

 

 

三个标识符
g:global 全局
i: ignore case 忽略大小写
mmultiple lines 多行搜索

 

 

元字符
原义文本字符
元字符 在正则表达式中有特殊意思的非字母字符

 

 

字符类
可以使用[]来构建一个简单的类,类是符合某些特征的对象
表达式[abc]把字符abc归为一类
‘a1b2c3d4‘.replace(/[abc]/g,‘x‘)
结果 x1x2x3d4

 

 

字符类取反
使用^创建,意思是不属于某类的内容
[^abc]表示不是字符a,bc的内容

 

 

范围类 
[a-z]表示从az任意字符,包含az
[]内部可以连写,[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)     此时$1Dog

 

前瞻

 正则从文本头部解析,所以文本尾部方向称为“前”,文本头部称为“后”

 前瞻就是正则匹配到规则时,向前检查是否符合断言

JS不支持后顾。符合特定断言称肯定/正向匹配,反之则称否定/负向匹配

 正向前瞻  expc(?=assert) 例:’a2*3’.replace(/w(?=\d)/g,’X’)    //X2*3

 负向前瞻  expc(?!assert)  例:’a2*3’.replace(/w(?!\d)/g,’X’)    //aX*X

 

字符串对象与正则表达式相关方法

  1. search(reg)

 返回第一个匹配结果index,查找不到返回-1

 忽略g,不执行全局查找,总是从字符串的开始进行检索

 

  1. match()

 检查字符串,找到一个或多个与regex匹配的文本

 是否有g标志会对结果产生影响

  非全局调用(g): 返回值与exec()返回值类似

  全局调用(g): 没有找到匹配项会返回null

找到了一个或多个匹配子串,则返回一个数组

没有indexinput属性

 

  1. split()

 常用为字符串分割为数组

 参数也可以是正则

  ‘a1b2c3’.split(/\d/g)    //[‘a’,’b’,’c’]

 

  1. replace(reg,function)

 function参数含义

  Function会在每次匹配的时候调用,有四个参数

  1. 匹配字符串、
  2. 正则表达式分组内容,没有分组则没有参数
  3. 匹配项在字符串中的index
  4. 原字符串

网上随便找了个例子,懒得换了:

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

 

  

 

js正则表达式学习笔记

原文:https://www.cnblogs.com/limcislimc/p/9091197.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!