正则表达式
本文主要介绍正则表达式常用的一些特殊字符以及调用正则表达式的方法,第一部分为正则表达式常用特殊字符,第二部分则为调用正则表达式的方法,具体内容如下,帮助记忆记录:
一、正则表达式特殊字符:
1、修饰符:用以说明高级匹配模式的规则;
i |
不区分大小写的匹配; |
/java$/i |
g |
全局匹配,全字符串匹配; |
/java$/g |
m |
多行匹配; 检索对象可能是多行存在的,此时m用于多行检索,其中^可以匹配单行的开头,$匹配单行的结束。 |
/java$/n |
注:三者可一起用; |
2、字符类:把直接量字符单独放进方括号内就组成了字符类;匹配字符类用;
[....] |
匹配方括号内的任意字符; |
[abc][a-z][a-zA-Z0-9] |
[^...] |
匹配不在方括号内的任何义字符; |
[^abc] |
. |
匹配除换行符以外的字符; |
|
\w |
匹配字母或数字或下划线; |
== [a-zA-Z0-9] + _ ; var pattern = /\w/; var bool = pattern.test('郎丽'); |
\W |
非字母、数字、下划线的字符; |
== [^a-zA-Z0-9] ; var pattern = /\W/; var bool = pattern.test('郎丽'); |
\s |
空白符;包括空格,制表符(Tab),换行符等; |
|
\S |
非空白符; |
|
\d |
任意数字; |
[0-9] |
\D |
非数字; |
[^0-9] |
3、重复类:字符类只能匹配任意一个字符,而有些字符需要重复选择匹配;
如:\d\d 两位数、\d\d\d\d 四位数 ;
{n,m} |
匹配前一项至少n次,但不能超过m次,匹配次数的范围[n ~ m]; |
\d{2,4} 匹配 2 ~ 4 个数字; |
{n,} |
匹配前一项至少n次,或者更多次,匹配范围[n ~ 无上限]; |
\d{4,} 匹配 4 + 个数字,最少是4位; |
{n} |
匹配前一项n次 |
[a-z]{3}\d 匹配三个字母和一个数字; |
? |
匹配前一项0次或者1次,前一项可选,等价{0,1}; |
[a-z]{3}\d? 匹配三个字母和一个可选的数字; |
+ |
匹配前一项1次或多次; |
== {1,} |
* |
匹配前一项0次或多次; |
== {0,} |
注:使用* 和 ? 是要注意,由于这些字符可能匹配0个字符,因此它们允许什么都不匹配; 例: var pattern = /a*/; var bool = pattern.test('郎丽'); alert(bool)//—— ? |
重复类尽可能多的匹配 —— 贪婪式匹配;
想要尽可能少的匹配的话可以在带带匹配的字符后跟对一个问号即可;如:/a+b/?
此匹配方式称为非贪婪式匹配;
4、指定位置:匹配发生的合法位置;
\b |
以某个单词开始或结束处;如\ba _ 以a开头的或以a结尾的字符串; |
var pattern = /\ba\w*\bd/; var bool = pattern.test('adcdrwa'); |
$ |
匹配字符串的结尾; |
|
^ |
匹配字符串的开头; |
|
\B |
匹配非单词边界的位置。 |
|
(?=p) |
零宽正向先行断言 —— 匹配宽度为零,满足一定的条件/断言; |
var pattern = /[0-3]/; var str = '2874385745890432950'; var str2 = pattern.test(str); alert(str2) ; |
(?!p) |
零宽负向先行断言,匹配后面跟的不是p 的位置; |
var pattern = /(?!j)/; var str = 'javascript:function'; var str2 = str.match(pattern); alert(str2[0]) ; |
5、选择:正则表达式的语法还包括指定选择项、子表达式分组和引用前一子表达式的特殊字符;
| |
选择、匹配该符号左边子表达式或右边子表达式; |
ab|cd|ef 匹配ab 或 cd 或 ef; \d{3}|[a-z]{4} 匹配三位数字或四个小写字母; |
() |
作用一:把单独的项组合成子表达式,以便可以像处理一个独立的单元那样用 | 、 * 、 + 、 ? 等来对单元内的项进行处理; |
java(script)? 匹配java,其后有没有script都行; (ab|dc)+|ef 匹配[(ab或dc)一次或多次]或 ef; |
作用二:在完整的模式中定义子模式;当一个正则表达式成功地和目标字符串相匹配时,可以从目标字符串中抽出 与 圆括号中的子模式相匹配的部分; |
var pattern = /([Jj]ava([Ss]cript)?)\s(fun\w*)/; var str = 'javascript function'; var str2 = str.replace(pattern,'$2'); alert(str2) ; |
|
作用三:允许在同一正则表达式的后部引用前面的子表达式,这是通过在字符\ 后加一位或多为数字来实现的。这个数字指定了带圆括号的子表达式在正则中的位置。所谓给子表达式编码; 例如:\1 引用的是第一个带圆括号的子表达式。以此类推\2、\3... 注意:子表达式中可以嵌套另一个子表达式,所以它的位置是参与计算的左括号的位置。 注:引用子表达式 非 模式的引用, 而是对子表达式匹配值得引用。 |
var pattern = /([a-z]*)(\d*)\1/; var str = 'langli0020000abdcdf'; var str2 = pattern.exec(str); alert(str2); |
|
注:|选择项的尝试匹配次序是从左到右,知道发现了匹配项。如果左边的选择项匹配,右边就会忽略。 |
||
(?:...) —— 组合, 作用域 ()作用一相同; |
6、直接量:不做详细介绍了;只需要注意有个\n换行符常用即可;
二、调用正则表达式的方法:
String方法:
1、Match:返回一个有匹配结果组成的数组;
Str.match(正则表达式);
数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。
var str = ' langli0020000langli ';
var str2 =str.match(/([a-z]+)(\d+)/);
str2 = [匹配的对象,第一个小括号匹配的内容,第二个小括号匹配的内容];
2、Replace:方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。返回一个新的字符串;
Str.replace(要替换的对象【正则表达式】,替换的内容);
var str = 'jbbhscriptj\njavascriptj';
var str2 = str.replace(/A/i,'b');
alert(str2);
3、Search:检索字符串 返回 匹配字符串 在检索对象中的第一个位置下标,如果没有的话返回-1;
Str.search(正则表达式);
var str = 'javascript';
alert(str.search(/cjjji/));
alert(str.search('cri'));
4、Split:字符串转属组;返回一个数组对象;
Str.split(正则表达式);
var str = ' 1 , 2 , 3 , 4 , 5 ';
var str2 =str.split(/\s*,\s*/);
var str3 =str.split(',');
/* alert(typeof str );*/
alert(str2);
alert(str3);
正则对象的方法:
1、Test:参数为字符串,对某个字符串进行检测,如果包含正则表达式的一个匹配结果,则返回true;
返回的是一个布尔值,通常用它来做登入框等信息的匹配;
正则表达式.test(str);
var pettar = /[plue]/g;
var str = ' 1 plus 2 equals 3 ';
var str2 =pettar.test(str);
alert(str2);
2、Exec:对一个指定字符串执行一个正则表达式;
exec 返回的是一个数组,匹配的是一个结果;有匹配结果返回匹配结果,没有返回null;
数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 正则表达式 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 正则表达式 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。与match相类似;
并提供关于本次匹配的完整信息,如两个属性的值;
exec有两个属性:index 即包含了发生匹配的字符的位置;
input 引用的是正在检索的字符串;
正则表达式.exec(str);
var pettar = /plus/g;
var str = ' 1 plus 2 equals 3 ';
var str2 =pettar.exec(str);
alert(str2);
alert(str2.index);
alert(str2.input);