正则表达式可以:
测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证
替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字
根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字
正则表达式对象的方法
test,返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。如果存在则返回 true,否则就返回 false。
exec,用正则表达式模式在字符串中运行查找,并返回含该查找结果的一个数组。
compile,把正则表达式编译为内部格式,从而执行得更快。
1 2 3 4 5 g (全文查找) i (忽略大小写) m (多行查找) ^ 代表字符开始位置 $ 代表字符结束位置
test方法,测试字符串,符合模式时返回true,否则返回false 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 var reg = /he/ var reg1 = /he/i var str = 'heaa' console .log(reg.test(str)) var str1 = 'ahae' console .log(reg.test(str1)) var str2 = 'HEHE' console .log(reg.test(str2)) console .log(reg1.test(str2)) reg = /\s/ ; str= "user Name" ; alert(reg.test(str)); reg=/^[a-z]/i ; str="variableName" ; alert(reg.test(str)); str="123abc" ; alert(reg.test(str)); var osVersion = "Ubuntu 8" ;var re = /^[a-z]+\s+\d+$/i ; alert(re.test(osVersion));
exec,返回一个数组,数组的第一个元素为完整的匹配内容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 var osVersion = "Ubuntu 8" re=/^[a-z]+\s+\d+$/i ; arr = re.exec(osVersion); console .log(arr[0 ]) re=/\d+/ ; var arr = re.exec(osVersion);console .log(arr, arr[0 ]);var osVersion = "Ubuntu 822 11" var arr = re.exec(osVersion);console .log(arr, arr[0 ]);var osVersion = "Ubuntu 8" re=/^[a-z]+\s+(\d+)$/i ; arr = re.exec(osVersion) console .log(arr) console .log(arr[0 ]);console .log(arr[1 ]);console .log(arr.length); osVersion = "Ubuntu 8.10" ; re = /^[a-z]+\s+\d+\.\d+$/i arr = re.exec(osVersion) console .log(arr, arr[0 ], arr[1 ], arr[2 ])console .log(arr.length)re = /^[a-z]+\s+(\d+)\.(\d+)$/i arr = re.exec(osVersion) console .log(arr, arr[0 ], arr[1 ], arr[2 ])console .log(arr.length)
当字符串不匹配re时,exec方法将返回null
1 2 3 4 var osVersion = "Ubuntu 8" var reg = /aa/ var arr = reg.exec(osVersion)console .log(arr)
String对象的一些和正则表达式有关的方法 replace方法,用于替换字符串 1 2 3 var str = 'some money' var str1 = str.replace('some' , 'much' )console .log(str1)
replace的第一个参数可以为正则表达式1 2 3 4 5 6 var re = /\s/ ;alert(str.replace(re,"%" )); str ="some some \tsome\t\f" ; re = /\s+/ ; alert(str.replace(re,"#" ));
因为一个正则表达式只能进行一次匹配,\s+匹配了第一个空格后就退出了1 2 re = /\s+/g ; alert(str.replace(re,"@" ));
split 1 2 3 4 5 6 7 8 var str = "a-bd-c" ;var arr = str.split("-" );如果str是用户输入的,他可能输入a-bd-c也可能输入a bd c或a_bd_c,但不会是abdc(这样就说他输错了) str = "a_db-c" ; re=/[^a-z]/ig ; arr = str.split(re); str1 = str.replace(re, '@' )
search 在字符串中查找时我们常用indexOf,与之对应用于正则查找的方法是search 1 2 3 4 5 6 7 str = "My age is 18.Golden age!" ; re = /\d+/ ; alert(str.search(re)); re=/\d+/g ; alert(str.search(re));
注意,当search方法没有找到匹配时,将返回-1
match 方法也用于将字符串与正则表达式进行匹配并返回结果数组 1 2 3 4 5 6 7 8 9 var str = "My name is CJ.Hello everyone!" ;re = /[A-Z]/g ; arr = str.match(re); alert(arr); re = /\b[a-z]*\b/gi ; str = "one two three four" ; alert(str.match(re));
特殊字符
字符
描述
\n
换行符
\r
回车符
\t
制表符
\f
换页符(Tab)
\cX
与X对应的控制字符
\b
退格符(BackSpace)
\v
垂直制表符
\0
空字符(“”)
字符类 简单类,反向类,范围类,组合类,预定义类
1 2 3 4 5 6 7 8 9 var re = /[abc123]/ ;re = /[^abc]/ ; re = /[a-b]/ ; re = /[^0-9]/ ; re = /[a-b0-9A-Z_]/ ;
预定义类
代码
等同于
匹配
.
IE下[^\n],其它[^\n\r]
匹配除换行符之外的任何一个字符
\d
[0-9]
匹配数字
\D
[^0-9]
匹配非数字字符
\s
[ \n\r\t\f\x0B]
匹配一个空白字符
\S
[^ \n\r\t\f\x0B]
匹配一个非空白字符
\w
[a-zA-Z0-9_]
匹配字母数字和下划线
\W
[^a-zA-Z0-9_]
匹配除字母数字下划线之外的字符
量词
代码
描述
*
匹配前面的子表达式零次或多次。例如,zo 能匹配 “z” 以及 “zoo”。 等价于{0,}。
+
匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
?
匹配前面的子表达式零次或一次。例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等价于 {0,1}。
{n}
n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
{n,}
n 是一个非负整数。至少匹配n 次。例如,’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。
{n,m}
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。刘, “o{1,3}” 将匹配 “fooooood” 中的前三个 o。’o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。