js中的正则表达式

正则表达式

标签(空格分隔): 前端


1、正则表达式是一个描述字符模式的对象,拥有强大的模式匹配和文本检索与替换功能。JavaScript中的正则表达式语法是Perl5的大型子集。
2、正则表达式的定义
(1)使用RegExp()构造函数创建RegExp对象

var re=new RegExp();

其中可接受两个可选参数,第一个为正则表达式的主体部分,其中转义字符中的“\”,在这种模式下都应该替换为“\”;第二个是正则表达式的修饰符g,i,m或者三者的组合,
(2)直接量定义

var re=/正则表达式主体/修饰符(可选);

3、具有特殊含义的标点符号:
^ $ . * + ? = ! | \ / ( ) [ ] { }
因此在主体中使用这些符号时应该进行转义
4、将直接量字符放进方括号中就可以组成字符类,字符类可以匹配它所包含的任意字符,有些字符类非常有用,使用特殊的转义字符表示,如## 标题 ##:[0-9a-zA-Z]使用转义字符\w表示。
5、正则表达式中字符类集合
[...] 方括号中的任意字符
[^...] 不在方括内中的任意字符
. 出换行符和其他Unicode行终止符之外的任意字符
\w 任何ASCII字符组成的单词,等价于[0-9a-zA-Z]
\W 任何不是ASCII字符组成的单词,等价于[^0-9a-zA-Z]
\s 任何Unicode空白符
\S 任何非Unicode空白符的字符
\d 任何ASCII数字,等价于[0-9]
\D 除去ASCII数字的任意字符,等价于[^0-9]
[\b] 退格直接量(特例)
6、重复字符语法
{n,m} 匹配前一项至少n次,但是不超过m次
{n,} 匹配前一项n次或者更多次
{n} 匹配前一项n次
? 匹配前一项0次或者1次等于{0,1}

  •   匹配前一项1次或者更多次,等于{1,}
    
  •   匹配前一项0次或者多次,等于{0,}
    

使用非贪婪匹配时(即尽可能少的匹配)只需在字符后加上一个问号即可,如/a+?/去匹配字符串"aaa"时,只会匹配第一个a
7、选择、分组和引用
(1)选择字符:| 匹配的是符号左边的子表达式或者右边的子表达式,如:/\d{3}|[a-z]{4}/即为匹配连续的三个数字或者是连续的4个小写字母
(2)圆括号的作用:
1、把单独的项组合成子表达式,方便处理单独的单元,如:/java(script)?/既可以匹配含有javascript,也可以匹配java,后面的?是对圆括号内的独立单元进行重复处理
2、在完整的模式中定义子模式,方便后续的使用和抽取。
3、允许在同一个正则表达式中的后部引用前面的子表达式,通过在字符“\”后加一位或多位数字来实现。例如\1就是引用第一个带圆括号的子表达式,但是这个引、引用不是对子表达式模式的引用,而是对与该模式相匹配的文本的引用。如以下代码:

/(["'])[^"']*\1/

这就可以实现内容左右两边单双引号的一致,即"content"或者是'content'
4、只组合符号?:这个符号不会产生引用,因此下例代码:

/([Jj]ava(?:[sS]cript?)\sis\s(fun\w*)/

则\2是对(fun\w*)相匹配的文本的引用
5、锚字符
^ 匹配字符串的开头,在多行检索中,匹配一行的开头
匹配字符串的结尾,在多行检索中,匹配一行的结尾 \b 匹配一个单词的边界 \B 匹配非单词边界的位置 (?=p) 零宽正向先行断言,要求接下来的字符都和p匹配,不能包括匹配p的那些字符 (?!p) 零宽负向先行断言,要求接下来的字符都不与p匹配 如:我们需要匹配单词“Java加数字,那么该方法将与指定的子表达式相匹配的文本来替换。
如:

var quote=/"([^"]*)"/g;
text.replace(quote,'“$1”');

这段代码将字符串中的英文引号替换为中文半角引号
3、match唯一参数就是一个正则表达式,返回一个数组,如果在不设置全局检索的情况下,数组的第一个元素就是匹配的字符串,余下的元素就是正则表达式中用圆括号括起来的子表达式;
如以下代码是解析一个URL:

var url=/(\w+):\/\/([\w.]+)\/(\S*)/;
var test="visit web at http://www.google.com/~aaaa";
var result=test.match(url);
result[0]//http://www.google.com/~aaaa
result[1]//http
result[2]//www.google.com
result[3]//~aaaa

4、split方法的参数也可以是一个正则表达式。
9、RegExp属性
1、source属性是一个只读的字符串,包含正则表达式的文本。
2、global属性为只读的布尔值,说明正则是否带有修饰符g
3、ignoreCase是只读的布尔值,说明正则是否带有修饰符i
4、multiline是只读的布尔值,说明正则是否带有修饰符m
5、lastIndex一个可读可写的整数。
10、RegExp方法
1、test方法:参数是字符串,参数中包含正则表达式的匹配结果就返回true,如:

var re=/java/i;
re.test("JavaScript");//返回true

2、exec方法:参数是一个字符串,对一个字符串进行匹配,如果可以匹配得到就返回一个数组(类似于match,但是exec方法不论是全局还是非全局返回的数组都一样),否则返回null。

最后是一个广告贴,最近新开了一个分享技术的公众号,欢迎大家关注

js中的正则表达式_第1张图片

你可能感兴趣的:(js中的正则表达式)