欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

正则表达式

程序员文章站 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/