正则表达式
程序员文章站
2022-06-29 21:56:27
...
正则表达式手册:https://www.jb51.net/tools/regexsc.htm
捕获匹配or非捕获匹配
() 捕获匹配。
(?:) 前置匹配(非捕获)。
(?=) 后置匹配(非捕获)。
(?!) 后置非匹配(非捕获)。
容易忽略的小细节点
\B 匹配非单词边界。“er\B
"能匹配"verb
"中的"er
",但不能匹配"never
"中的"er
"。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b
"可以匹配"never
"中的"er
",但不能匹配"verb
"中的"er
"。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
正则表达式以及字符串的方法
两个高能的方法:replace、exec。
replace方法: replace([string|exec],[string|function])
使用字符串的场景:替换字符串中固定模式的字符串。
使用函数场景:替换字符串中固定模式的字符串,并且需要做转换。
exec方法:返回正则匹配后结果。
案例
/* 案例1:反转url中的名称和值 */
const rTest = /([\?&])([0-9A-Za-z]+)=([0-9A-Za-z]+)/ig;
const url1 = "http://www.baidu.com#login?name=hao&age=23&sex=male";
// 使用$+number的方式获取匹配组
const resultUrl1 = url1.replace(rTest, '$1$3=$2');
/* 案例2:解析url中query */
let info,urlMap = {};
while((info = rTest.exec(url1)) != null) {
const testInfo = info[0];
const key = info[2];
const value = info[3];
// 使用RegExp中的变量
console.log("regexp data:", info, RegExp.$1, RegExp.$2, RegExp.$3);
urlMap[key] = value;
}
/* 案例3:温度转化 */
function f2c(x)
{
function convert(str, p1, offset, s)
{
console.log("convert:",str, p1, offset, s, RegExp.$1);
return ((p1-32) * 5/9) + "C";
}
var s = String(x);
var test = /(\d+(?:\.\d*)?)F\b/g;
// 使用string.prototype.replace方法
return s.replace(test, convert);
}
资源:
在线测试工具: http://tool.oschina.net/regex/