您的位置:首页 > 其它

基本正则笔记

2021-05-13 22:44 106 查看

1.   ^   字符串的开始; $ 字符串的结束

 example: "^abc" 以abc 开头   "def$"  以def结尾

2.  *   没有或者更多; + 一次或者更多  ; ? 没有或者一个

 example:  "ab*" a 后面跟着零个或者若干个b;

      "ab+" a 后面后面跟着一个b或者若干个b ;

      "ab?"  a 后面跟着零个b或者一个b

      "a?b+$"  结尾处,没有a或者一个a后面一个或者多个b; 以没有a或者一个a后面一个或者多个b结尾(从后面往前读)

3. { }  表示重复次数

 example: "ab{2}"  a后面跟着两个b

      "ab{2,}"  a后面跟着至少两个b

      "ab{2,5}" a 后面跟着2到5个b

 4.  |   表示或

 example: "hi | hello" 字符串里有hi 或者hello

      (b | cd)ef  'bef' 或者cdef

5.   .  代表任何字符串

 example:   "a.[0-9]" a 后面跟着任意一个字符和任意一个数字

      "^.{3}$" 任意三个字符的字符串

6.  []   括号的内容是可选字符集, 某些字符允许在一个字符串中的某一特定位置出现

example: 

  "[ab]":表示一个字符串有一个"a"或"b"(相当于"a¦b");

  "[a-d]":表示一个字符串包含小写的'a'到'd'中的一个(相当于"a¦b¦c¦d"或者"[abcd]");

  "^[a-zA-Z]":表示一个以字母开头的字符串;

  "[0-9]%":表示一个百分号前有一位的数字;

  ",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。

 

 7.  ?:     ?=

?:和?=都用于子表达式里面,

?:   表示匹配且获取,

?=   表示匹配但不获取。

/1(?:2)/匹配12

/1(?=2)/匹配1,而且是后面有2的那个1

 

千位符:

 /(\d)(?=(?:\d{3})+$)/g     

'12596874'.replace(/(\d)(?=(?:\d{3})+$)/g, '$1,')   // 12,596,874

 或者:

'4577'.replace(/(\d)(?=(\d{3})+$)/g,  '$1,') // 4,577

 自动补充小数点 

return function(text) {
        var n = (text || 0) + ''
        if (n.indexOf('.') === -1) {
            n = n.replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') + '.00'
        }
        if (n.indexOf('.') > -1) {
            n = n.split('.')
            if (n[1].length >= 2) {
                n = n[0].replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') + '.' + n[1].slice(0, 2)
            } else {
                n = n[0].replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') + '.' + n[1] + '0'
            }
        }
        return n
    }

  

常用正则匹配:

 将电话号码格式化为: 1** **** ****   152 2222 3336  

已知是正确的号码: 

'15278945612'.replace(/^(\d{3})(\d{4})(\d{4})/g,'$1 $2 $3') //  152 7894 5612

不是一个正确个数的号码: 

'156'.replace(/^(\d{3})(\d{0,4})?(\d{4})?/g,'$1 $2 $3').replace(/(\s{0,}$)/g,'')  // 156
'1563'.replace(/^(\d{3})(\d{0,4})?(\d{4})?/g,'$1 $2 $3').replace(/(\s{0,}$)/g,'')  // 156 3
'1562345'.replace(/^(\d{3})(\d{0,4})?(\d{4})?/g,'$1 $2 $3').replace(/(\s{0,}$)/g,'')  // 156 2345
'15623456789'.replace(/^(\d{3})(\d{0,4})?(\d{4})?/g,'$1 $2 $3').replace(/(\s{0,}$)/g,'')  // 156 2345 6789

解释: 上面是通过两次replace,第一次的正则替换,有些情况会再字符串背后添加多余的空格 一个或两个。因此再用链式调用 替换掉多余的空格。

 

//校验密码:只能输入6-10个以字母开头、可带数字、“_”、“.”的字串 

/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){5,9}$/    

  拆分: ^[a-zA-Z]{1} 一个字母开头,

      ([a-zA-Z0-9] | [._]) 数字,字母 或者 ._       

      {4,19}  4-19 个

// 常用密码  只能输入6-20个字母、数字、下划线, \w 用于匹配字母 数字 下划线

/^(\w){6,20}$/

 

//校验URL

/^http[s]{0,1}:\/\/.+$/

/^http[s]{0,1}:\/\/.{1,n}$/

(表示url串的长度为length(“https://”) + n )


 \ / :表示字符“/”。

匹配URL 和IP地址的

function IsURL (str_url) {
    var strRegex = '^((https|http|ftp|rtsp|mms)?://)'
        + '?(([0-9a-z_!~*\'().&=+$%-]+: )?[0-9a-z_!~*\'().&=+$%-]+@)?' //ftp的user@ 
        + '(([0-9]{1,3}.){3}[0-9]{1,3}' // IP形式的URL- 199.194.52.184 
        + '|' // 允许IP和DOMAIN(域名) 
        + '([0-9a-z_!~*\'()-]+.)*' // 域名- www. 
        + '([0-9a-z][0-9a-z-]{0,61})?[0-9a-z].' // 二级域名 
        + '[a-z]{2,6})' // first level domain- .com or .museum 
        + '(:[0-9]{1,4})?' // 端口- :80 
        + '((/?)|' // a slash isn't required if there is no file name 
        + '(/[0-9a-z_!~*\'().;?:@&=+$,%#-]+)+/?)$';
    var re=new RegExp(strRegex);
    //re.test() 
    if (re.test(str_url)) {
        return (true);
    } else {
        return (false);
    }
}

  

 

取出 a 的 href:  /(?<=       

        /

 

 

 

  • 已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById” 正则解决

var a = 'get-element-by-id'.split("-");

var b= [];

a.forEach(function(i){b.push(titleCase(i))})

function titleCase(str) { return str.toLowerCase().replace(/( |^)[a-z]/g, (L) => L.toUpperCase()); };

function firstLowerCase(str) { return str.replace(/( |^)[A-Z]/, (L) => L.toLowerCase()); };

firstLowerCase(b.join().replace(/,/g,''));
// "getElementById"

 

对电话号码的部分隐藏:

"13456789012".replace(/(\d{3})(\d{4})(\d{4})/,"$1****$3")

主要通过分组将里面部分的需要隐藏的替换

 在vscode 中正则替换

 

reg: translateKey\((.+),\s+(.+)\)

替换成: getLanguageValue($2)  

问题: 如果一行有两个目标值 将匹配后面一个 ,并且两个目标之间的内容 全部替换成空


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: