麦子学院 2017-06-22 16:40
JavaScript学习之引用类型RegExp详解
回复:0 查看:2444
·
字面量
var
reg=/\d+/g;
console.log(
reg.test("789456"));//true
·
构造函数
var reg2=
new RegExp("\\d+","g");console.log(reg2.test("1234444456"));//trueconsole.log(reg2.test("asdsa"));//false
修饰符
·
i:
表示不区分大小写(case-insensitive
)模式,即在确定匹配项时忽略模式与字符串的大小写;
·
m:
表示多行(multiline
)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模 式匹配的项。
·
g:
表示全局(global
)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即 停止;
元字符
·
单个字符数字
· .
匹配除换行符以外的任意字符
· [a-zA-Z0-p]
与
[^a-zA-Z0-p]
匹配方括号中的任意字符,前面代
^
是匹配不在方括号中的任意字符;
· \d
与
\D
匹配数字和匹配非数字;
· \w
与
\W
匹配字符和匹配非字母
·
空白字符
· \O
匹配
null
字符
· \b
匹配空格字符
· \f
匹配换页符
· \n
匹配换行符
· \r
匹配回车符
· \s
和
\S
匹配空白字符,空格、制表符或换行符。大写的
S
是匹配非空字符
· \t
匹配制表符
·
定位符
· ^
行首匹配
· $
行尾匹配
· \A
只匹配字符串的开始处
· \b \B
匹配单词便捷,词在
[]
内无效,匹配非单词边界
· G
匹配当前搜索的开始位置
· \Z \z
匹配字符串结束处或行尾,只匹配字符串结束处
·
限定符
· x?
匹配
0
个或一个
x
· x*
匹配
0
个或者任意多个
x
· x+
匹配一个或者多个
· x{m,n}
匹配
m-n
个
x
;
·
分组
· (?:x)
匹配
x
但不记录匹配结果(匹配不捕获)
· x(?=y)
当
x
后面接
y
时匹配
x
· x(?!y)
当
x
后不是
y
时匹配
x
·
引用
· \1…\9 $1…$9
返回就割在模式匹配期间找到的,最近保存的部分
·
或模式
· x|y|z
匹配
x
或者
y
或者
z
属性
实例属性
RegExp
的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息。
· global
:布尔值,检测是走设置
g
标记
· ignoreCase
:布尔值,检测是否设置
i
标记
· nultiline
: 布尔值,检测是否设置了
m
标记
· lastIndex
: 整数,表示开始搜索下一个匹配项的字符位置,从
0
算起。
· source
返回正则表达式的字符串表示
,
按照字面量形式而非传入构造函数中的字符串模式返回。
通过这些属性可以获知一个正则表达式的各方面信息,但却没有多大用处,因为这些信息全都包含在模式声明中。
var pattern1 = /\[bc\]at/i;console.log(pattern1.global); //falseconsole.log(pattern1.ignoreCase); //trueconsole.log(pattern1.multiline); //falseconsole.log(pattern1.lastIndex); //0console.log(pattern1.source); //"\[bc\]at"
var pattern2 =
new RegExp("\\[bc\\]at", "i");console.log(pattern2.global); //falseconsole.log(pattern2.ignoreCase); //trueconsole.log(pattern2.multiline); //falseconsole.log(pattern2.lastIndex); //0console.log(pattern2.source); //"\[bc\]at"
尽管第一个模式使用的是字面量,第二个模式使用了 RegExp
构造函数,但它们的
source
属性是相同的。可见,
source
属性保存的是规范形式的字符串,即字面量形式所用的字符串。
构造函数属性
· $_ input
返回最近一次匹配的字符串
· $& lastMatch
返回最近一次的匹配项
· $+ lastParen
返回最近一次匹配的捕获组
· $` leftContext
返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字符
· $’ rightContext
返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符
· $* multiline
检测表达式是否采用多行匹配
m
方法
实例方法
test()
方法在字符串中检测模式匹配,返回
true
或
false
var re = null, i;
for (i = 0; i < 10; i++) {
re = /cat/g;
console.log(re.test("catastrophe")); //true
}
for (i = 0; i < 10; i++) {
re =
new RegExp("cat", "g");
console.log(re.test("catastrophe")); //true
}
RegExp
对象的主要方法是
exec()
,该方法是专门为捕获组而设计的。
exec()
接受一个参数,即 要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回
null
。 返回的数组虽然是
Array
的实例,但包含两个额外的属性:
index
和
input
。其中,
index
表示匹配 项在字符串中的位置,而
input
表示应用正则表达式的字符串。在数组中,第一项是与整个模式匹配 的字符串,其他项是与模式中的捕获组匹配的字符串(如果模式中没有捕获组,则该数组只包含一项)。
var text = "cat, bat, sat, fat";
var pattern1 = /.at/;
var matches = pattern1.exec(text);console.log(matches.index); //0console.log(matches[0]); //catconsole.log(pattern1.lastIndex); //0
matches = pattern1.exec(text);console.log(matches.index); //0console.log(matches[0]); //catconsole.log(pattern1.lastIndex); //0
var pattern2 = /.at/g;
var matches = pattern2.exec(text);console.log(matches.index); //0console.log(matches[0]); //catconsole.log(pattern2.lastIndex); //3
matches = pattern2.exec(text);console.log(matches.index); //5console.log(matches[0]); //batconsole.log(pattern2.lastIndex); //8
第一个模式 pattern1
不是全局模式,因此每次调用
exec()
返回的都是第一个匹配项(
“cat”
)。而第二个模式
pattern2
是全局模式,因此每次调用
exec()
都会返回字符串中的下一个匹配项,直至搜索到字符串末尾为止。此外,还应该注意模式的
lastIndex
属性的变化情况。在全局匹配模式下,
lastIndex
的值在每次调用
exec()
后都会增加,而在非全局模式下则始终保持不变。
字符串方法
· match
找到一个或者多个正则表达式的匹配
· replace
替换与正则表达式匹配的子串
· search
检索与正则表达式匹配的值
· split
把字符串分割为字符串数组
来源: liuguoquan727