javascript中的正则表达式用RegExp对象表示,可以使用RegExp()构造函数来创建RegExp对象
[...] | 方括号内的任意字符 |
[^...] | 不在方括号内的任意字符 |
. | 除换行符和其他unicode行终止符之外的任意字符 |
\w | 任何ASCII字符组成的单词,等价于[a-zA-Z0-9] |
\W | 任何不是ASCII字符组成的单词,等价于[^a-zA-Z0-9] |
\s | 任何unicode空白符 |
\S | 任何非unicode空白符的字符,注意\w和\S的区别 |
\d | 任何ASCII数字,等价于[0-9] |
\D | 除了ASCII数字外的任意字符,等价于[^0-9] |
正则表达式的重复字符语法
字符 | 含义 |
{n,m} | 匹配前一项至少n次,但不能超过m次 |
{n,} | 匹配前一项n次或者更多次 |
{n} | 匹配前一项n次 |
? | 匹配前一项0次或者1次,也就是说前一项是可选的,相当于{0,1} |
+ | 匹配前一项1次或者多次,等价于{1,} |
* | 匹配前一项0次或者多次,等价于{0,} |
例子:
/\d{2,4}/ 匹配2-4个数字
/\w{3}\d?/ 精确匹配三个单词和1个可选数字
/\s+java\s+/ 匹配前面和后面带有一个或多个空白的字符串"java"
/[^(]*/ 匹配一个或多个非左括号的字符
/ab|cd|ef/ 匹配ab或者cd或者ef
圆括号在正则表达式中的使用:
如/java(script)?/ 可以匹配java,script可有可无
/(ab|cd)+|ef/ 可以匹配字符串ef,也可以匹配ab或者cd的一次或者多次重复
\num表示引用 的第num个位置小括号的内容
/['"][^'"]*['"]/我们一般写成这样的/(['"])[^\1]*\1/ 其中\1表示的是第一个小括号里面的内容,即['"]
| | 选择,匹配的是该符号 左边或者右边的表达式 |
(...) | 组合,将几个项组合为一个单元,也可以记住这个组合,以便后序使用 |
(?:) | 只组合,把项目组合到一个单元,但不进行记忆 |
\n | 和第n个分组第一次匹配的字符相匹配,组是圆括号的表达式 |
\B匹配边界位置
/\B[Ss]cript/ 于JavaScript和postscript匹配,但是 不与script和scripting匹配
修饰符
修饰符是放在"/"符号之外的,也就是说,他们不是出现在两条斜杠之间的,而是 第二条斜线之后的
字符 | 含义 |
i | 执行不区分大小写的匹配 |
g | 执行一个全局匹配,简言之,即找到所有匹配,而不是在找到第一个后停止 |
m | 多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束 |
string支持4种使用正则表达式的方法:
1、search
"JavaScript".search(/script/i)
2、replace
text.replace(/javascript/gi,"JaveScript")
3、match (返回数组)
"1 plus 2 equals 3".match(/\d+/g) 返回['1','2','3']
4、RegExp属性
RegExp最主要的执行模式匹配的方法是exec(),exec()方法对一个指定的字符串执行一个正则表达式,简言之,就是在一个字符串中执行匹配检索。如果没找到,它就返回null,但如果找到了一个匹配,它将返回一个数组
第二个方法是test()方法
var pattern = /Java/g; var text = "JavaScript is more fun than Javal" var result while((result = pattern.exec(text)) != null) { alert('Matched' + result[0] + '"' + 'at position' + result.index + ";next search begins at" + pattern.lastIndex); } var pattern = /java/i pattern.test("JavaScript") //返回true