RegExpJavaScript中正则表达式判断匹配规则以及常用方法

Posted 谢清月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RegExpJavaScript中正则表达式判断匹配规则以及常用方法相关的知识,希望对你有一定的参考价值。

字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在。 正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了。
\d可以匹配一个数字                 ‘00\d‘可以匹配‘007‘ ,‘\d\d\d‘可以匹配‘010‘
\w可以匹配一个字母或数字      ‘\w\w‘可以匹配‘js‘
\s可以匹配一个空格(也包括Tab等空白符)
\DWS都是表示匹配与小写字母相反的匹配关系
\数字n表示指向分组n捕获到的文本的一个引用,能够再次被匹配       /(\d+)(0*)\1/可以匹配‘22300223’
.可以匹配任意字符                  ‘js.‘可以匹配‘jsp‘‘jss‘‘js!‘
*表示任意个字符(包括0个)
+表示至少一个字符
?表示0个或1个字符
{n}表示n个字符
{n,m}表示n-m个字符
A|B可以匹配A或B       (J|j)ava(S|s)cript可以匹配javascript‘Javascript‘‘javaScript‘或者‘javascript‘
^表示行的开头          ^\d表示必须以数字开头
$表示行的结束          \d$表示必须以数字结束
[]表示范围            
 [] 中的^ 表示排除某个字符   [^#?] 表示除了?和#的所有字符                   
[a-zA-Z\_\$][0-9a-zA-Z\_\$]*可以匹配由字母或下划线、$开头,后接任意个由一个数字、字母或者下划线、$组成的字符串,也就是JavaScript允许的变量名
[a-zA-Z\_\$][0-9a-zA-Z\_\$]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)
 
 
 
用正则表达式切分字符串比用固定的字符更灵活
‘a,b;; c  d‘.split(/[\s\,\;]+/); // [‘a‘, ‘b‘, ‘c‘, ‘d‘]

  

 
除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()表示的就是要提取的分组(Group)
如果正则表达式中定义了组,就可以在RegExp对象上用exec()方法提取出子串来。
exec()匹配成功后,返回一个Array,第一个元素是正则表达式匹配到的整个字符串,后面的字符串表示匹配成功的子串。
exec()匹配失败时返回null
^(\d{3})-(\d{3,8})$分别定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码:
var re = /^(\d{3})-(\d{3,8})$/;
re.exec(‘010-12345‘); // [‘010-12345‘, ‘010‘, ‘12345‘]
re.exec(‘010 12345‘); // null

  

 
RegExp对象的test()方法用于测试给定的字符串是否符合条件。
var re = /^\d{3}\-\d{3,8}$/;
re.test(‘010-12345‘); // true
re.test(‘010-1234x‘); // false

 

需要特别指出的是,正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。
var re = /^(\d+)(0*)$/;
re.exec(‘102300‘); // [‘102300‘, ‘102300‘, ‘‘]

 

由于\d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。

加个?就可以让\d+采用非贪婪匹配:

var re = /^(\d+?)(0*)$/;
re.exec(‘102300‘); // [‘102300‘, ‘1023‘, ‘00‘]
 
?: 不想被捕获的时候使用,可以提高程序执行速度
比如 ([a-z][0-9])+  ,(  ) 里面的内容被捕获了,如果写成  (?:[a-z][0-9])+,整体匹配是一样的, 就是不会捕获 ( )里内容。
 
 
特殊标志
g标志 ,表示全局匹配
i标志,表示忽略大小写
m标志,表示执行多行匹配

以上是关于RegExpJavaScript中正则表达式判断匹配规则以及常用方法的主要内容,如果未能解决你的问题,请参考以下文章

python正则表达式如何用已知字符串(如"aaa")替换文件中匹中的分组内容,不是匹中的全部,而是其中一个组

java正则表达式

正则表达式

php 正则表达式

Java笔记:正则表达式

JS正则表达式(转载)