Regular Expression学习笔记
来源:互联网 发布:金星能过性能活不知乎 编辑:程序博客网 时间:2024/06/11 11:29
正则写法
var re = /a/;//简写/.../里不能为空,因为会误以为是注释;var re = new RegExp('a');
新建一个RegExp
对象;和新建Array对象,Object对象一样,有简写;
平时建议用简写,因为简写的性能更好;
但如果正则表达式里有非类字符串的类型(其实并不是字符串,只能不知怎么表述),则不能简写,因为/.../里写的只能类字符串类型;
var arr = [];var arr = new Array();var obj = {};var obj = new Object();
正则常用方法
test()
test()
: 正则去匹配字符串,如果匹配成功就返回真,如果匹配失败就返回假
语法:正则.test(字符串)
var str = 'abcdef';var re = /b/;alert( re.test(str) ); //true
search()
search()
: 正则去匹配字符串 , 如果匹配成功,就返回匹配成功的位置,如果匹配失败就返回 -1,和indexof()
差不多
语法:字符串.search(正则)
正则默认是区分大小写的;
如果不区分大小写的话,需要在正则的最后加标识i
var str = 'abcdef';var re = /B/i;//var re = new RegExp('B','i');alert( str.search(re) );
match()
match()
: 正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null
语法:`字符串.match(正则)
正则默认匹配成功就会结束,不会继续匹配
如果想全部查找,就要加标识 g(全局匹配)##### replace()
replace()`: 正则去匹配字符串,匹配成功的字符去替换成新的字符串
语法:字符串.replace(正则,新的字符串)
第二个参数:可以是字符串,也可以是一个回调函数
var str = 'aaa';var re = /a+/g;str = str.replace(re,function(str){ return str; //回调函数的第一个参数:就是匹配成功的字符});alert(str);
匹配子项
小括号 () (还有分组操作的意思)
把正则的整体叫做(母亲)
第一个小括号里面的正则,叫做这个第一个子项(母亲的第一个孩子),第二个小括号就是第二个子项
var str = '2013-6-7';var re = /(\d+)(-)/g;str = str.replace(re,function($0,$1,$2){ //第一个参数:$0(母亲),第二个参数 : $1(第一个孩子),第三个参数 : $2(第二个孩子) return $1 + '.';});alert( str ); //2013.6.7
match()
中也有匹配子项
var str = 'abc';var re1 = /abc/;var re2 = /(a)(b)(c)/;alert( str.match(re1) ); //abcalert( str.match(re2) ); //[abc,a,b,c]//当match不加g的时候才可以获取到子项的集合
字符类
一组相似的元素,用 [] 中括号的整体代表一个字符,如果想代表多个,则在[]
后面加上一个+
;
var str1 = 'abc';var str2 = 'abdc';var re1 = /a[bde]c/;//bde是或的关系var re2 = /a[bde]+c/;//alert( re1.test(str1) ); //truealert( re1.test(str2) ); //falsealert( re2.test(str2) ); //true
排除 ^
: 如果^
写在[]
里面的话,就代表排除的意思
[]
里面还可以写一个范围,但是要从小到大;
var re = /a[a-z0-9A-Z]c/;
常见元字符
.
: 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像"(.|\n)"的模式。
^
: 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置$
: 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置
\s
: 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]\S
: 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
\d
: 匹配一个数字字符。等价于 [0-9]
\D
: 匹配一个非数字字符。等价于 [^0-9]
\w
: 匹配包括下划线的任何单词字符。等价于[A-Za-z0-9_]
( 字母 ,数字,下划线_ )\W
: 匹配任何非单词字符。等价于 [^A-Za-z0-9_]
\b
: 匹配一个单词边界(起始,结束,空格),也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'\B
: 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'
\r
: 匹配一个回车符。等价于 \x0d
和 \cM
\t
: 匹配一个制表符。等价于 \x09
和 \cI
\num
: 匹配 num,其中 num 是一个正整数。对第num个子项的引用。例如,'(.)\1' 匹配两个连续的相同字符。
量词类:*
: 匹配前面的子表达式零次或多次。例如,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?'。请注意在逗号和两个数之间不能有空格
?
: 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
更多内容看 正则表达式-元字符表
常用表单校验
匹配中文:[\u4e00-\u9fa5]
行首行尾空格:^\s*|\s*$
Email:^\w+@[a-z0-9]+(\.[a-z]+){1,3}$
网址:[a-zA-z]+://[^\s]*
QQ号:[1-9][0-9]{4,9}
邮政编码:[1-9]\d{5}
身份证:[1-9]\d{14}|[1-9]\d{17}|[1-9]\d{16}x
可以把这些正则放到一个空间里,调用起来方便;
var re = { qq : /[1-9][0-9]{4,9}/, email : /[1-9]\d{5}/, ...}需要时就调相应的正则:re.qq.test(str);
- Regular Expression学习笔记
- 正则表达式(Regular Expression)学习笔记
- 正则表达式学习笔记【Regular Expression】
- Regular Expression学习
- VC++学习笔记(4)-------使用Regular Expression
- The study record of Regular Expression 正则表达式学习笔记
- 正则表达式 Regular Expression 学习笔记(二):Grouping 集合
- 正则表达式(regular expression)——学习笔记
- 【LeetCode笔记】Regular Expression Matching
- Regular Expression 正则表达式 笔记
- 学习正则表达式(regular expression)
- 学习正则表达式(regular expression)
- 学习笔记之Myeclipse学习笔记(一)_“invalid Regular Expression Options”问题解决
- 正则表达式笔记(Regular expression 1)
- 正则表达式笔记(Regular expression 2)
- 正则表达式 笔记 regExpression Regular expression
- leetcode解题笔记:Regular Expression Matching
- 【笔记】【imooc】Javascript 正则表达式(Regular Expression)
- Linux 常用命令大全
- AJAX学习笔记
- 使用FormData进行Ajax请求上传文件到controller层的实现
- jQuery能做什么
- 计算圆、长方形的面积和周长
- Regular Expression学习笔记
- CSS3学习笔记
- linux tar压缩解压命令
- window下Jekyll建站过程
- php 使用composer phpmailer发送qq邮件
- HTML5学习笔记之canvas
- SQL GUID和自增列做主键的优缺点
- HTML5学习笔记
- Tensorflow 实战--黄文坚 高清完整PDF及python代码