js中的正则表达式

作者: 忽如寄 | 来源:发表于2016-09-11 23:26 被阅读280次

正则表达式

标签(空格分隔): 前端


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"如果使用/Java/的话会连JavaScript等词也匹配上,如果采用/\sJava\s/的话如果Java出现在字符串的开始或者结尾又不能正确匹配上,而采用真正的单词边界\b即可解决这个问题。
/Java(?!Script)([A-Z]\w
/可以匹配Java后面跟随一个大写字母和任意多个ASCII单词,但是不能匹配JavaScript。
8、用于模式匹配的string方法
1、search参数可以使正则表达式或者字符,如果不是正则表达式就是先将参数转化为正则,返回字符中首次出现的索引号,类似于indexOf
2、replace进行检索与替换,接受两个参数,第一个是查找的字符,第二个是替换字符,如果第一个参数不是正则,该方法也不会将其转化为正则,如果替换字符中出现了$加数字,那么该方法将与指定的子表达式相匹配的文本来替换。
如:

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正则表达式

    一、Js正则表达式概述 正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象...

  • JS正则表达式的骚操作

    参考资料 《JS正则表达式的分组匹配》《正则表达式之捕获组/非捕获组介绍》《正则表达式中(?:pattern)、(...

  • 2018-09-15

    正则表达式的区别 JS中语法: /匹配对象的模式/

  • 2018-07-03

    主要完成 js 中的 正则表达式 git 地址 ,欢迎给赞

  • 正则表达式过滤字符串中的js script脚本

    字符串使用正则表达式过滤js脚本 1.例子: 2.正则表达式: 3.匹配结果: 4.可以在js或java等中处理,...

  • JS基础

    JS基础 JS运算 JS代码块 JS对象 原型对象 GC 正则表达式

  • 正则入门

    正则表达式是用于匹配字符串中字符组合的模式。在js中正则表达式也是对象。 创建正则表达式使用一个正则表达式字面量,...

  • js 正则表达式

    js 正则表达式

  • JavaScript基础 JavaScript正则表达式

    JS正则表达式:

  • 判断一个值是否在数组里

    1.正则表达式js 中判断某个元素是否存在于某个 js 数组中,相当于 PHP 语言中的 in_array 函数。...

网友评论

    本文标题:js中的正则表达式

    本文链接:https://www.haomeiwen.com/subject/dslyettx.html