正则表达式
在js中,string作为一个很重要的对象,它的使用方法也很多。或者说伴随着他的一些方法和函数也很多。在这里主要说明正则表达式。以及一些中级的操作技巧。
正则表达式的定义:
正则表达式是一种方法。是一种定义字符模式的方法。简单点而言就是当要检索某个文本时,可以使用一种模式来描述要检索的内容。
有了它之后,我们就可以更简单的去拆分,查找,替换字符串中与模式字符匹配的字符。
需要说明的是,RegExp是js中的内置对象,就像String和Array。而在js中正则表达式的使用正好就是通过这个对象来使用的。
RegExp对象的创建:
1:
var myRegExp = /\b'|'\b/;
其中的/和/代表着正则表达式的开始和结束。就像引号表示字符串的开始和结束一样。
2:
var myRegExp = new RegExp ("\\b'|'\\b ")
这是两种指定正则表达式的方法,第一种方法在js中更加简洁高效。在日常的编程中一般使用第一种。
接下来是正则表达式的一些简单的用法:
在String对象中,很多方法都把正则表达式当做参数,但是RegExp作为一个对象有它自己的方法和属性。
在js中RegExp通常被split();match();replace();search();作为参数。下面的例子是用replace方法和正则表达式实现的一个简单的文本替换。
var myString = 'Paul,Puala,Pauline,paul,Paul'; var myRegExp = /Paul/; myString = myString.replace(myRegExp,'Ringo'); console.log(myString);
上述的程序是把Paul换成Ringo,replace()方法接受两个参数第一个是RegExp参数用来查找和替换的模式,另一个是替换的文本。
注意:此时的运行结果是:Ringo,Puala,Pauline,paul,Paul
这是因为:RegExp默认仅查找与模式匹配的第一个子字符。找到即停止。这一特性非常重要。
因为这里想要达到的目的是全局查找,全局匹配。全局替换。所以就来说明一下RegExp这个对象。
语法:/pattern/attributes
new RegExp(pattern, attributes);
pattern参数是一个字符串,指定了正则表达式的模式或其他正则表达式;
attributes是一个可选的字符:包含属性"g"、"i"和"m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。
正则表达式的元字符(拥有特殊含义的字符):
.查找单个字符,除了换行和行结束符。
\w查找单词字符。
\W查找非单词字符。
\d查找数字。
\D查找非数字字符。
\s查找空白字符。
\S查找非空白字符。
\b匹配单词边界。
\B匹配非单词边界。
\0查找NUL字符。
\n查找换行符。
\f查找换页符。
\r查找回车符。
\t查找制表符。
\v查找垂直制表符。
\xxx查找以八进制数xxx规定的字符。
\xdd查找以十六进制数dd规定的字符。
\uxxxx查找以十六进制数xxxx规定的Unicode字符。
需要注意的是大小写。因为大小写字符的含义大相径庭!!!
下面是正则表达式的量词:
n+匹配任何包含至少一个n的字符串。
n*匹配任何包含零个或多个n的字符串。
n?匹配任何包含零个或一个n的字符串。
n{X}匹配包含X个n的序列的字符串。
n{X,Y}匹配包含X至Y个n的序列的字符串。
n{X,}匹配包含至少X个n的序列的字符串。
n$匹配任何结尾为n的字符串。
^n匹配任何开头为n的字符串。
?=n匹配任何其后紧接指定字符串n的字符串。
?!n匹配任何其后没有紧接指定字符串n的字符串。
在日常使用中有下面的一些重复字符:
{n}表示前一项出现n次
{n,}前一项出现n次或者n次以上。
{n,m}前一项至少出现n次,最多出现m次
?前一项出现0次或者1次
+前一项出现1次或者多次
×前一项出现0次或者多次
还有一些方括号(用于查找某个范围内的字符):
[abc]查找方括号之间的任何字符。
[^abc]查找任何不在方括号之间的字符。
[0-9]查找任何从0至9的数字。
[a-z]查找任何从小写a到小写z的字符。
[A-Z]查找任何从大写A到大写Z的字符。
[A-z]查找任何从大写A到小写z的字符。
[adgk]查找给定集合内的任何字符。
[^adgk]查找给定集合外的任何字符。
(red|blue|green)查找任何指定的选项。
还有一些常用的位置字符:
^模式必须位于字符串的开头,如果是多行字符串,模式就位于一行的开头,对于多行文本(既包含回车符的字符串),在定义正则表达式的时候,需要用/myregex/m设置多行标记。
$模式必须位于字符串的结束位置,如果是多行字符串,模式就位于一行的结束位置,对于多行文本(即包含回车符的字符串,)在定义正则表达式的时候,需要使用/myregex/m设置多行标记。
\b匹配单词分界位置。即单词字符与非单词字符之间的位置
\B匹配非单词分界位置。
RegExp对象的方法
RegExp对象有3个方法:test()、exec()以及compile()。
test()方法检索字符串中的指定值。返回值是true或false。
exec()方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回null。
compile()方法用于改变RegExp。
compile()既可以改变检索模式,也可以添加或删除第二个参数。
RegExp对象属性
globalRegExp对象是否具有标志g。
ignoreCaseRegExp对象是否具有标志i。
lastIndex一个整数,标示开始下一次匹配的字符位置。
multilineRegExp对象是否具有标志m。
source正则表达式的源文本。
支持正则表达式的String对象的方法
search检索与正则表达式相匹配的值。
match找到一个或多个正则表达式的匹配。
replace替换与正则表达式匹配的子串。
split把字符串分割为字符串数组。