正则表达式

在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把字符串分割为字符串数组。

相关推荐