如果只想要括号最原始的功能,但不会引用它,即,既不在 API 里引用,也不在正则里反向引用。 此时可以使用非捕获括号 (?:p)
var regex = /(?:ab)+/g;
var string = "ababa abbb ababab";
console.log( string.match(regex) ); // => ["abab", "ab", "ababab"]
写到\10分组的时候,想写一个、\1后跟字符0怎么写?
\10 分组
展示为\1 和0的写法 \1(?:0)
// $1,$2是在正则以外的写法,必须调用跟正则有关的方法后才能使用
var re = /(\w+)\s(\w+)/;
console.log(re.$1)//报错
var str = "John Smith";
var newstr = str.replace(re, "$2, $1"); // 调用replace方法用到了re正则,可以使用$1,$2
console.log(newstr); // Smith, John
function titleize (str) {
return str.toLowerCase().replace(/(?:^|\s)\w/g, function (c) {
return c.toUpperCase();
});
}
console.log( titleize('my name is epeli') ); // => "My Name Is Epeli"
驼峰化
function camelize (str) {
return str.replace(/[-_\s]+(.)?/g, function (match, c) {
return c ? c.toUpperCase() : '';
});
}
console.log( camelize('-moz-transform') ); // => "MozTransform"
创建正则的两种方式
1.创建RegExp对象
2.创建正则表达式字面量
两种创建方式的区别有两点:
1.创建RegExp对象的方法,可以创建动态正则
2.创建RegExp对象的方法,需要对特殊字符做转义处理
search() 和indexOf方法的返回跟判断完全一致,可以写正则,indexOf不可以
字符串对象共有4个方法,可以使用正则表达式:match()、replace()、search()和split(),test()
正则其实只匹配字符和位置,这句话就概括了正则的精髓。
修饰符
g 表示全局匹配
i 表示不区分大小写
m 表示多行匹配
这里只列举常用的,更多请查询MDN
特殊字符
有些不好理解,所以配合案例
而\B呢,当然就和\b相反了,具体就是\w 与 \w、 \W 与 \W、^ 与 \W,\W 与 $ 之间的位置。
(?=l), 表示 "l" 字符前面的位置
(?!p), 就是 (?=p) 的反面意思
() 捕获括号
分组后面有量词的话,分组最终捕获到的数据是最后一次的匹配。
如果只想要括号最原始的功能,但不会引用它,即,既不在 API 里引用,也不在正则里反向引用。 此时可以使用非捕获括号 (?:p)
写到\10分组的时候,想写一个、\1后跟字符0怎么写?
\10 分组 展示为\1 和0的写法 \1(?:0)
方法调用后的特殊字符
x(?=y) 先行断言
x(?!y) 正向否定查找(相当于先行断言的取反)
(?<=y)x 后行断言
这里只列举常用的,更多请查询MDN
描述数量的特殊字符前面必须跟有效的字符(没字符的话描述谁的数量呢)
?不光表示数量特殊字符,还可以表示惰性匹配,跟在数量特殊字符的后面。
字符串对象共有4个方法,可以使用正则表达式:match()、replace()、search()和split()。
test()方法用于正则表达式,有匹配项就返回true
数字的千位分隔符表示法(比如把 "12345678",变成 "12,345,678")
匹配标签
实体字符转换为等值的HTML。
将HTML特殊字符转换成等值的实体
将单词的首字符转换为大写
驼峰化
中划线化
实现模板引擎
《JavaScript正则迷你书》链接 https://pan.baidu.com/s/1J_sVhmgZ94qXTr5c4hAItQ 4ki3