js 正则表达式 regexp \ \n \t \r [] ^ () \s \S \b \B \w \W \d \D 常用正则表达式

常用正则表达式

https://c.runoob.com/front-end/854

QQ: [1-9][0-9]{4,}   (腾讯qq号从10000开始)
中文昵称2-8位: /^[\u4e00-\u9fa5]{2,8}$/
手机号: /^1[3|4|5|7|8]\d{9}$/
用户名: /^[a-Z0-9_-]{3,16}$/
密码:/^[a-Z0-9_-]{6,18}$/
十六进制值:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/

正则表达式 的作用

匹配特殊字符或有特殊搭配原则的字符的最佳选择

方法

  • reg.test(); 判断有没有匹配片段 返回true或false reg.test(//)
  • reg.exec(); exec命名捕获分组 提取标签属性文本示例
    • 不加 g reg.lastIndex不变
    • reg.exec(str) == null reg.lastIndex 重置
    • reg.exec(str) 匹配根据reg.lastIndex 匹配
  • str.match(); 字符串内检索指定的值 并返回
  • str.replace(); 与正则表达式相匹配的值 替换
  • str.search(); 检索与正则表达式相匹配的值 返回索引 -1没有匹配到
  • str.split(); 字符串分成字符串数组
var reg = /h/g;
var str = 'ddftthrh'
str.replace(reg,'g');//"ddfttgrg"
var reg = /ab/g
var str = "abababab"
console.log(reg.exec(str),reg.lastIndex)
console.log(reg.exec(str),reg.lastIndex)
console.log(reg.exec(str),reg.lastIndex)
console.log(reg.exec(str),reg.lastIndex)
console.log(reg.exec(str),reg.lastIndex)
console.log(reg.exec(str),reg.lastIndex)

js 正则表达式 regexp \ \n \t \r [] ^ () \s \S \b \B \w \W \d \D 常用正则表达式_第1张图片

两种创建方式

直接量(推荐)
new ReExp();

var reg = /abc/i;//直接量创建 i 忽视大小写
var reg = new RegExp('abc','i');//
var reg = new RegExp(/abc/,'i');//
var str = 'abcd';
reg.test(str);// true

修饰符 i g m

i 忽视大小写
g 执行全局匹配(查找所有匹配,而非找到第一个匹配后停止)
m 执行多行匹配
gi 全局匹配+忽略大小写

m 多行匹配 要配合g一起使用

匹配多行以abc开头的字符串

var str = 'abcddd\nabcghhg\nabcghhg'
var reg = /^abc/gm  // 匹配abc开头的字符串
str.match(reg) // ["abc", "abc", "abc"]

var reg2 = /^abc/g // 匹配abc开头的字符串
str.match(reg2) // ["abc"]  

[]方括号
用于查找某个范围内的内容

[abc] 查找括号之间的取值范围
查看字符串有没有三位连续的数字

// [0-9] -->[0123456789]
var reg = /[0-9][0-9][0-9]/g;
var str = "1fd78fhjfd9997fdgdfg877nmkkkl";
str.match(reg);//["999", "877"] 

尖角 ^
在 [^] 是非,除了什么什么
外面是

var reg = /[^a][^b]/g;//查看字符串2位连续 不是ab的匹配判断
var str = "ab1cd";
str.match(reg);//["b1", "cd"]

()括号

var reg = /(abc|bcd)/g;//查看字符串 匹配abc或bcd
var str = "abcdbcd";
str.match(reg);//["abc", "bcd"]

元字符

. 查找单个字符,除了换行和行结束符 . === [^\r\n]
\w 查找单词字符 \w === [0-9A-z_]
\W 查找非单词字符 \W === [^\w]
\d 查找数字字符 \d === [0-9]
\D 查找非数字字符 \D === [^\d]
\s 查找空白字符(空格符,制表符\t,回车符\r,换行符\n,垂直换行符\v,换页符\f) \s === [\n\f\t]
\S 查找非空白字符 \S === [^\s]
\b 匹配单词边界
\B 匹配非单词边界
\0 查找null字符
\n 换行符
\f 换页符
\r 行结束符
\t 缩进符 Tab
\v 垂直换行符
\xxx 查找以八进制数 xxx规定的字符
\xdd
\uxxxx

匹配一切字符
/[\u0000-\uffff]/g
/[\s\S]/
/[\d\D]/

// uxxxx
var reg = /\u56fa\u5b9a\u56fa\u5b9a\u4e2a/g
var str = "固定固定个固定固定个"
str.match(reg);//["固定固定个", "固定固定个"]
// \w === [0-9A-z_]
// \W === [^\w]
var reg = /\w/g;//查看字符串 
var str = "abcdbcd";
str.match(reg);//["abcdbcd"]

// \b 单词边界
var reg = /\bklk\b/g
var str = "abc klk lop"
str.match(reg);//["klk"]

// \B  [^\b]
var reg = /\bklk\B/g  
var str = "abc klklop"
str.match(reg);//["klk"]

贪婪匹配 能匹配多的就不匹配少

var reg = /\w{2,3}/g; // 匹配包含x至y个n的序列字符串
var str = "aaaaa"
str.match(reg);// ["aaa", "aa"]

非贪婪匹配 能匹配少的就不匹配多

var reg = /\w{2,3}?/g; // 匹配包含x至y个n的序列字符串
var str = "aaaaa"
str.match(reg);// ["aa", "aa"]

括号

[] 中括号 字符集合 
{} 大括号 量词符
() 小括号 表示优先级

量词

用于设定某个模式出现的次数
n+ 匹配任何包含至少一个n的字符串
n* 匹配任何包含0个n或多个n的字符串
n? 匹配任何包含0个n或一个n的字符串
n{x} 匹配包含x个n的序列字符串
n{x,y} 匹配包含x至y个n的序列字符串 中间不要有空格
n{x,} 匹配包含至少x个n的序列字符串
n$ 匹配任意结尾为n的字符串
^n 匹配任意开头为n的字符串
?=n 匹配任意字符其后紧接字符为n的字符
?!n 匹配任意字符其后紧接字符不为n的字符

var reg = /s+/g
var str = "sdsd"
str.match(reg);// ["s", "s"]

var reg = /\w+/g;// \w可以出现一次或多次
var str = "sdsd"
str.match(reg);// ["sdsd"]

// 贪婪匹配 能匹配多个就不匹配少
var reg = /\w*/g;// \w 能识别到 + 最后一个光标定位点
var str = "sdsd"
str.match(reg);// ["sdsd",""]

var reg = /\d*/g; //\d 不能识别到 光标定位点 下一个字符 光标定位点 。。。
var str = "sdsd"
str.match(reg);// ["","","",""]

var reg = /\w?/g; 
var str = "aaa"
str.match(reg);// ["a","a","a",""]

var reg = /\w{2}/g; 
var str = "aaa"
str.match(reg);// ["aa"]

// 贪婪匹配 能匹配多个就不匹配少
var reg = /\w{2,3}/g; // 匹配包含x至y个n的序列字符串
var str = "aaaaa"
str.match(reg);// ["aaa", "aa"]

var reg = /\w{2,}/g; // 匹配包含至少x个n的序列字符串
var str = "aaaa"
str.match(reg);// ["aaaa"]

var reg = /\w$/g; // 匹配任意结尾为n的字符串
var str = "abcd"
str.match(reg);// ["d"]

var reg = /^abc$/g; // abc既是开头又是结尾
var str = "abc"
str.match(reg);['abc']

// 正向预查  正向断言
var reg = /\w(?=c)/g; // 后面链接c的\w
var str = "abc"
str.match(reg);// ["b"] 后面的b

var reg = /b(?!c)/g; // 后面不链接c的b
var str = "abcbb"
str.match(reg);// ["b","b"]

检验一个字符串首尾是否有数字

var str = "123hjghj8"
var reg = /^\d|\d$/g;//开头或结尾是数字
// /^\d[\s\S]*\d$/g 开头和结尾是数字
str.match(reg);

属性

reg.ignoreCase 正则写了 i 返回true
reg.global 正则写了 g 返回true
reg.multiline 正则写了 m 返回true
reg.source 正则内容
reg.lastIndex 游标

特殊字符

转义字符 \

var str = "abc\"hfgufhui";
console.log(str);// abc"hfgufhui
var str2 = "abc\\hfgufhui";
console.log(str2);// abc\hfgufhui
var str3 = "\
	sdad\
	dsfsf\
"

js 正则表达式 regexp \ \n \t \r [] ^ () \s \S \b \B \w \W \d \D 常用正则表达式_第2张图片

换行字符 \n
js 正则表达式 regexp \ \n \t \r [] ^ () \s \S \b \B \w \W \d \D 常用正则表达式_第3张图片
行结束符 \r
回车代表 \r\n
缩进 \t

var str = "abc\thjkhu";

在这里插入图片描述

题目

匹配 xxxx 格式

// \1 反向引用第一个子表达式((\w))引用的内容
var reg = /(\w)\1\1\1/g;
var str = "dddd-ghjhjfgh-kkkk"
str.match(reg);//["dddd", "kkkk"]

匹配 aabb 格式

var reg = /(\w)\1(\w)\2/g;
var str = "ddff-ghjhjfgh-kkkk"
str.match(reg);//["ddff", "kkkk"]
console.log(reg.exec(str))

js 正则表达式 regexp \ \n \t \r [] ^ () \s \S \b \B \w \W \d \D 常用正则表达式_第4张图片
aabb -> bbaa

var reg = /(\w)\1(\w)\2/g;
var str = 'aabb'
str.replace(reg,"$2$2$1$1");//aabb

the-first-name 小驼峰式写法 theFirstName

var reg = /-(\w)/g;
var str = 'the-first-name'
// str.replace(reg,'$1'.toUpperCase()); 无效还是 thefirstname
str.replace(reg,function($,$1){
	return $1.toUpperCase()
});// theFirstName

aaaaabbbbbbbbbbbbccccccc — abc

var str = 'aaaaabbbbbbbbbbbbccccccc';
reg = /(\w)\1*/g;
str.replace(reg,'$1');//abc

科学计数法

var str = "10000000000"
var reg = /(?=(\B)(\d{3})+$)/g ; // 空后面跟着 非单词边界 3的位数个 1到多个数字 重后往前($)
str.match(reg)
str.replace(reg,'.');//"10.000.000.000"

匹配 xx-xx 格式

var str = 'xxyyzlkk' 
str.match(/\w{2}/g).join('-') //xx-yy-zl-kk

匹配 aa-bb 格式

var str = 'xxyyzzkkjklo' 
str.match(/(\w)\1/g).join('-');//"xx-yy-zz-kk"

匹配非 汉字字母数字

var str = 'wer123!@#$_}{||_ =4+' 
str.match(/[^A-Za-z0-9\u4e00-\u9fa5]/g)//["!", "@", "#", "$", "_", "}", "{", "|", "|", "_", " ", "=", "+"]

// 排除其它特殊字符 _
var str1 = 'wer123!_____&&&88+4+'
str1.match(/[^A-Za-z0-9_\u4e00-\u9fa5]/g)  // ["!", "&", "&", "&", "+", "+"]

你可能感兴趣的:(JavaScript)