定义正则表达式方式有两种
-
直接量语法
/pattern/attibutes
-
创建RegExp对象的语法
new RegExp(pattern, attributes)
可以把/pattern/attibutes
放到new RegExp(pattern, attributes)
的 pattern
中创建两个不一样的对象。
修饰符(attibutes)
-
i
忽略大小写
-
g
全局匹配
-
m
执行多行匹配。请看下面的例子
var reg = /^[a-z]/gm var reg2 = /^[a-z]/g var str = 'ab\nc\na' str.match(reg) // ["a", "c", "a"] str.match(ref2) // ["a"]
表达式
pattern
可以使用表达式的方式进行匹配
1. 方括号
[]
用于表示查找某个范围内的字符
2. 元字符
元字符即拥有特殊含义的字符
. // 表示除换行\n和行结束符\r以外的
/w === [0-9A-z_]
/W === [^/w]
/d === [0-9]
/D === [^/d]
/s === [/n/t/f/r/v]
/S === [^/s]
/b === 单词的边界
/B === 非单词边界
...
3. 量词
量词的使用都是贪婪算法,能多则不少,如果想要使用少的情况,可以在任何量词后面使用?
n+ [1, ]
n* [0, ]
n? [0,1]
n{x} [x]
n{x,y} [x, y]
n$ // 匹配任何结尾为n的字符串
^n // 匹配任何开头为n的字符串
?=n // 匹配任何其后紧跟指定字符串n的字符串
?!n // 匹配任何其后没有紧跟指定字符串n的字符串
RegExp 对象方法
- exec()
- test()
支持正则表达式的string对象的方法
- search()
- match()
- replace()
- split()
其他
正向预查(正向断言)
// 查找以b结尾的字符,但不包括b
var str = 'abacbaa'
var reg = /\w(?=b)/g
// var reg = /\w(?!b)/g
str.match(reg) // ['a', 'c']
题目
// (2014年百度最后一题)科学计数法:把 100000000 改成 10.000.000
// 思路:
// 1. 从后往前匹配3的倍数; // /((/d{3})+$)/g
// 2. 匹配的是空字符; // 正向预查 /?=((/d{3})+$)/g
// 3. 把该空字符替换成 . ; // replace()
// 4. 边界的匹配规则取消; // /?=(\B)((/d{3})+$)/g
var str = '100000000'
var reg = /?=(\B)((\d{3})+$)/g
str.str.replace(reg, '.') // 100.000.000
待续...