基本正则笔记
作者:互联网
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)
问题: 如果一行有两个目标值 将匹配后面一个 ,并且两个目标之间的内容 全部替换成空
标签:基本,ab,或者,9a,后面,笔记,replace,正则,字符串 来源: https://blog.51cto.com/u_15200634/2774413