题记:入行不久,正则是个很关键的知识点,利用几天的业余时间学习却发现效率不高。还是边学边总结吧,也为和我具有类似情况的同鞋们提供一个参考。
总原则:实例配合理论,以理论创建实例,以实例验证理论,理论结合实例透彻理解正则灵活应用正则。
正则两个作用:模式匹配、模式替换。
定义:var pattern = /s$/ 等价于 var pattern = new RegExp("s$")
$匹配字符串的结尾,多行检索中匹配一行的结尾
实例1:判断一个字符串是否以“s”结尾 / 将尾部的“s”替换成“--s”
var pattern = /s$/ ;
alert(pattern.test('https'));//true
alert(pattern.test('http'));//false
alert('https'.replace(pattern,'--s')); //http--s
alert('http'.replace(pattern,'--s'));//http
?? 多行检索的实例不知道是什么,求指教!!
^匹配字符串的开头,多行检索中匹配一行的开头。
实例2:去除字符串开头和结尾的空格
alert('-'+' 你好 '.replace(/(^\s*)|(\s*$)/g, "")+'-'); //-你好-
\s 任何Unicode空白的字符(全角和半角空格)
| 分组选择,或,在上例中表示“字符串开始的空格或字符串结尾的空格,替换成空字符串”
() 组合,将几个项组合为一个单元
* 匹配前一项零次或多次,在上例中如果不使用此符号,只能去掉开口的第一个空格和结尾的最后一个空格
alert('-'+' 你好 '.replace(/(^\s)|(\s$)/g, "")+'-'); //- 你好 -
g 正则中的修饰符,执行一个全局匹配(找到所有匹配,而不是找到一个之后就停止)
alert('-'+' 你好 '.replace(/(^\s*)|(\s*$)/, "")+'-'); //-你好 -
实例3:替换连续的字符串片段
i 正则中的另一个修饰符,执行不区分大小写的匹配
alert('JavaScript has no relationship with Java'.replace(/java/ig, "$"));
//$Script has no relationship with $
上例中修饰符/g和/i可以互换位置不影响结果,如:
alert('JavaScript has no relationship with Java'.replace(/java/gi, "$"));
正则中的修饰符:i , g , m(启用多行匹配模式,^和$匹配每一行的开始和末尾)
实例4:替换单词
alert('JavaScript has no relationship with Java'.replace(/\bjava\b/ig, "$"));
//JavaScript has no relationship with $
\b 匹配一个单词的边界
\B 匹配非单词边界的位置
alert('JavaScript has no relationship with java'.replace(/\bjava\B/ig, "$"));
//Java$ has no relationship with $Java
正则中的锚字符 --- 指定匹配位置:^ $ \b \B (?=p) (?!p)
RegExp 对象
5个属性:.source .global .ignoreCase .multiline lastIndex
2个方法:.exec() .test()
遇到的时候结合实例再讲吧...
常用场景解读:
场景1:QQ号
/^[^0][0-9]{4,9}/或者/^[1-9][0-9]{4,9}/
QQ号最少5位,最多10为(最起码当前是),第一位不能是0,后面是数字的4-9位的任意组合
学点记要:^放在中括号外匹配开头,放在中括号内表示排除式匹配
场景2:待续。。