Skip to content

正则表达式记录


  • 分割千位符数字
js
Eg: 1;
"1234567890".replace(/\B(?=(?:\d{3})+(?!\d))/g, ","); // 1,234,567,890

alt text

  • 将get-element-by-id 转换成 getElementById
js
Eg:1
function tofunctionName(str){
    return str.replace(/-\w/g,function(x){
        return x.slice(1).toUpperCase();
    }
}
Eg:2
 var str = "20180606";
 var newStr = str.replace(/(\d{4})(\d{2})(\d{2})/,function(input,$1,$2,$3){
                   console.log(input); //201806
                   console.log($1);//2018
                   console.log($2);//06
                   return $1+'-'+$2+'-'+$3;//2018-06-06
    })
    console.log(newStr);//2018-06-06
//x为匹配到的字符串,其中函数参数中还可以接受一个参数,表示为匹配到的下标位置
  • 去掉字符串中<p style="color:red;">这是一个p标签的段落</p>,请用正则表达式去掉
js
var reg = /<p.*>|<\s*p\s*>/gi;
var str = "<p style='color:red'>这是一个p标签的段落</p>";
console.log(str.reg(reg, ""));
//输出内容:----这是一个p标签的段落
  • 输入的小数中间不能有其他符号,且只能有一个小数点。
js
//10.2可以0.32 (前面有一个空格)可以10.02.2不可以.2不可以
var reg = /^\d+\.?\d*$/;
var value = document.getElementById("input")[0];
reg.test(value.trim());
  • 匹配标签里的文字部分?
js
var str =
  '<tr>\
                    <td class="title">2015-01-24 00:00:00.0&nbsp;&nbsp;商标注册申请驳回通知发文</td>\
                    </tr><tr><td>2015-02-06 00:00:00.0&nbsp;&nbsp;驳回复审中</td>\
               </tr>';
// var reg = /(?<=<td.*?>).*?(?=<\/td>)/gi;这个是错误的,因为 . 是匹配任意单个单个字符,所以这个
// 直接会匹配一些tr标签 td标签  所以不对
var reg = /(?<=<td[^>]*?>)(.*?)(?=<\/td>)/gi; //这里应该有取非操作符
  • LeetCode正则表达式匹配。
text
 ##### 题目
  给定一个字符串 (s) 和一个字符模式 (p)。实现支持 '.' 和 '*' 的正则表达式匹配。
  '.' 匹配任意单个字符。
  '*' 匹配零个或多个前面的元素。
  匹配应该覆盖整个字符串 (s) ,而不是部分字符串。

 ###### 说明:

  s 可能为空,且只包含从 a-z 的小写字母。
  p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。

 示例 1:
 ###### 输入:
     s = "aa"
  p = "a"
  输出: false
  解释: "a" 无法匹配 "aa" 整个字符串。

 示例 2:
 ###### 输入:
  s = "aa"
  p = "a*"
  输出: true
  解释: '*' 代表可匹配零个或多个前面的元素, 即可以匹配 'a' 。因此, 重复 'a' 一次, 字符串可变为 "aa"。

 示例 3:
 ###### 输入:
  s = "ab"
  p = ".*"
  输出: true
  解释: ".*" 表示可匹配零个或多个('*')任意字符('.')。

 示例 4:
 ###### 输入:
 s = "aab"
 p = "c*a*b"
 ###### 输出: true
 解释: 'c' 可以不被重复, 'a' 可以被重复一次。因此可以匹配字符串 "aab"。

 示例 5:
 ###### 输入:
 s = "mississippi"
 p = "mis*is*p*."
 输出: false

###### 答案
var isMatch = function(s, p) {
    var reg = new RegExp('^' + p + '$')
    return reg.test(s)
};
  • 正则表达式解决url参数问题
js
function getUrlParams(name) {
  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
  var r = window.location.search.substr(1).match(reg);
  if (r != null) {
    return unescape(r[2]);
  }
  return null;
}
//使用方法:将想要查找的参数传入getUrlParams方法即可
正则表达式匹配微信浏览器内核版本
js
    function getBrowserVersion () {
        let browser = { appname: 'unknown', version: 0 },
        userAgent = window.navigator.userAgent.toLowerCase()
        if (
          /(msie|firefox|opera|chrome|netscape)\D+(\d[\d.]*)/.test(userAgent)
        ) {
          browser.appname = RegExp.$1
          browser.version = RegExp.$2
        } else if (/safari\/(\d+\.\d+)\b/.test(userAgent)) {
          browser.appname = 'safari'
          browser.version = RegExp.$1
        }
        console.log(browser.appname + browser.version)
        return (browser.appname + browser.version)
    },
    //这样就可以拿到微信所使用的浏览器的类型和版本
文本框中,财务那边复制机构ID号,每个ID会换行,后台字段要求传A,B,C这样的格式。
js
  var reg =  /\d.*(?=\n)?/gi
  var textarera = reg.match(reg)
  insStr = textarea.join(,)
后端渲染,面包屑导航,A/B/C/,点击上一级一次,请求接口,其中一个字段为必须为A/B/,即去掉C/。
js
    var a = A/B/C/
  var c = a.replace(/(?<=\/)([^\/.]+)?\/$/,'')
  // c为A/B/

上次更新于: