RegExp即正则表达式 对象用于规定在文本中检索的内容。
-
创建RegExp对象
var name=new RegExp(pattern, attributes);
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。修饰符 描述 i 执行对大小写不敏感的匹配。 g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 m 执行多行匹配。 -
RegExp的简单模式--检索一个单独的字符。
定义:
var patt1=new RegExp("e");
使用该 RegExp 对象在一个字符串中检索时,将寻找的是字符 "e"。-
RegExp 对象的方法:test()、exec()、compile()
- test() 方法检索字符串中的指定值。返回值是 true 或 false。
document.write(patt1.test("The best things in life are free"));
结果:true - exec()检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
document.write(patt1.exec("The best things in life are free"));
结果:e
如果定义变量的时候,增加一个全局参数g,即var patt1=new RegExp("e",g);
,运行一次exec(),找到第一个“e”,并存储其位置。如果再次运行 exec(),则从存储的位置开始检索,并找到下一个 "e",并存储其位置。
例如:
结果:eeeeeenulldo{ result=patt1.exec("The best things in life are free") document.write(result) }while(result != null)
- compile() 方法用于改变 RegExp。
compile() 既可以改变检索模式,也可以添加或删除第二个参数。
patt1.compile("d");
检索对象由“e”变为“d”
- test() 方法检索字符串中的指定值。返回值是 true 或 false。
-
复杂模式--正则表达式:更多的字符,并可用于解析、格式检查、替换
RegExp 对象属性
属性 描述 global RegExp 对象是否具有标志 g。RegExpobjec.global返回值true或者false ignoreCase RegExp 对象是否具有标志 i。RegExpobjec.ignorance返回值true或者false lastIndex 一个整数,它声明的是上一次匹配文本之后的第一个字符的位置。初始值为0 multiline RegExp 对象是否具有标志 m。RegExpobjec.multiline返回值true或者false source 正则表达式的源文本。返回模式匹配所用的文本。 RegExp方法:test()、exec()、compile()
正则表达式之方括号
方括号用于查找某个范围内的字符:
表达式 | 描述 | ||
---|---|---|---|
[abc] | 查找方括号之间的任何字符。 | ||
[^abc] | 查找任何不在方括号之间的字符。 | ||
[0-9] | 查找任何从 0 至 9 的数字。 | ||
[a-z] | 查找任何从小写 a 到小写 z 的字符。 | ||
[A-Z] | 查找任何从大写 A 到大写 Z 的字符。 | ||
[A-z] | 查找任何从大写 A 到小写 z 的字符。 | ||
[adgk] | 查找给定集合内的任何字符。 | ||
[^adgk] | 查找给定集合外的任何字符。 | ||
(red | blue | green) | 查找任何指定的选项。 |
正则表达式之元字符
元字符(Metacharacter)是拥有特殊含义的字符:
元字符 | 描述 |
---|---|
. | 查找单个字符,除了换行和行结束符。保证"."前后的字符完全相同即可。 |
\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 的字符串。 |
支持正则表达式的 String 对象的方法
- search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
stringObject.search(regexp)
例如:
结果:6var str="Visit W3School!" document.write(str.search(/W3School/)) #不区分大小写:document.write(str.search(/w3school/i))
- match():字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
使用全局匹配的正则表达式来检索字符串中的所有数字:
结果:1,2,3var str="1 plus 2 equal 3" document.write(str.match(/\d+/g))
- replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
stringObject.replace(regexp/substr,replacement)
replace() 方法详解
没看太懂
- split() 方法用于把一个字符串分割成字符串数组。
stringObject.split(separator,howmany)
separator :
必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
howmany :可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
var str="How are you doing today?"
document.write(str.split(" ") + "<br />")
document.write(str.split("") + "<br />")
document.write(str.split(" ",3))
结果:输出:
How,are,you,doing,today?
H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
How,are,you