快速了解正则表达式

什么是正则表达式?个人理解正则表达式就是利用规定的一些字符和字符组合来抽象指代匹配某些语句的字符串(官方解释:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串)。

一、下面是经常用到的一些正则表达式字符:
1. \
将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。
例如:'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
2. ^
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
例如:var reg = /^123/,str = 132; reg.test(str) // false
3.$
匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
例如: var reg = /123$/,str = 132123; reg.test(str) // true
4.* 等价于 {0,}
匹配前面的子表达式零次或多次。
例如:var reg = /to*/, str = 'tool'; reg.test(str) // true
5.+ 等价于 {1,}
匹配前面的子表达式一次或多次。
例如:var reg = /to+/, str = 'taool'; reg.test(str) // false
6.? 等价于 {0,1}
匹配前面的子表达式零次或一次。
例如:var reg = /to(ol)?/, str = 'tool'; reg.test(str) // true
7. {n}
n 是一个非负整数。匹配确定的 n 次。
例如:var reg = /to(ol){2}/, str = 'tool'; reg.test(str) // false
8. {n,}
n 是一个非负整数。至少匹配n 次。
例如:var reg = /to(ol){2,}/, str = 'toololol'; reg.test(str) // true
9. {n,m}
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
例如:var reg = /to(ol){1,2}/, str = 'tool'; reg.test(str) // true
10. .
匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像"(.|\n)"的模式。
11. (pattern)
匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
例如: var reg = /to(ol)/, str = 'tool'; str.replace(reg, function(item, $0){return $0 + 'test'}) //oltest
12. (?:pattern)
匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。
例如: 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
13. (?=pattern)
正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
例如:var reg = /Windows (?=95|98|NT|2000)/, str = 'Windows 98'; str.match(reg) // ['Windows']
14. (?!pattern)
负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
例如:var reg = /Windows (?!95|98|NT|2000)/, str = 'Windows 98'; str.match(reg) //null
15. x|y
匹配 x 或 y。
例如:var reg = /z|food/, str = "food"; str.match(reg) //['food']
16. [xyz]
字符集合。匹配所包含的任意一个字符。
例如:var reg = /[abcd]/, str = "food"; str.match(reg) //['d']
17. [^xyz]
负值字符范围。匹配任何不在指定范围内的任意字符。
例如:var reg = /[abcd]/g, str = "food"; str.match(reg) //['f', 'o', 'o']
18. [a-z]
字符范围。匹配指定范围内的任意字符。
例如:var reg = /[a-z]/g, str = "food"; str.match(reg) //['f', 'o', 'o', 'd']
19. [^a-z]
负值字符范围。匹配任何不在指定范围内的任意字符。
例如:var reg = /[a-z]/g, str = "food"; str.match(reg) //null
20. \b
匹配一个单词边界,也就是指单词和空格间的位置。
例如:var reg = /od\b/, str = "food"; str.match(reg) //['od']
21. \B
匹配非单词边界。
例如:var reg = /od\B/, str = "food"; str.match(reg) //null
22. \d
匹配一个数字字符。等价于 [0-9]。
23. \D
匹配一个非数字字符。等价于 [^0-9]。
24. \f
匹配一个换页符。等价于 \x0c 和 \cL。
25. \n
匹配一个换行符。等价于 \x0a 和 \cJ。
26. \r
匹配一个回车符。等价于 \x0d 和 \cM。
27. \s
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
28. \S
匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
29. \t
匹配一个制表符。等价于 \x09 和 \cI。
30. \v
匹配一个垂直制表符。等价于 \x0b 和 \cK。
31. \w
匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
32. \W
匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
33. \xn
匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。
例如:'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。
34. \num
匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
例如:var reg = /(\d+)B\1C(\d+)D\2/, str = "123B123C456D456"; str.match(reg) // ["123B123C456D456", "123", "456"]
35. \n
标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
36. \nm
标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
37. \nml
如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
38. \un
匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。
例如:\u00A9 匹配版权符号 (?)。
39.\u4e00-\u9fa5 中文汉字

二、常用的JS与正则相关的方法:
1. test()
校验字符串是否符合正则表达式
例如: var reg = /to(ol)?/, str = 'tool'; reg.test(str) // true

2. String.prototype.replace(reg, fn)
替换正则匹配的内容
例如:var reg = /to(ol)/, str = 'tool'; str.replace(reg, function(item, $0){return $0 + 'test'})
//oltest

3. String.prototype.match()
捕获符合正则的内容并返回,返回的内容是一个数组。
例如:var reg = /(\d+)B\1C(\d+)D\2/, str = "123B123C456D456"; str.match(reg)
// ["123B123C456D456", "123", "456"]

三、下面举个例子看看正则在项目中的运用
getUrlParam:function (name) {
    //构造一个含有目标参数的正则表达式对象
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    //匹配目标参数
    var res = window.location.search.substr(1).match(reg);
    if (res != null){
        return decodeURIComponent(res[2]);
    }else{
        return null;
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值