创建方式
构造器
var reg1 = new RegExp();
console.log(reg1);
字面量创建
var reg1 = / /;
console.log(reg1);
使用
var reg1 = /use/;
reg1.test('use');
reg1.test('use1');
reg1.test('use2');
reg1.test('use3');
reg1.test('us');
var reg1 = new RegExp('use');
reg1.test('use');
reg1.test('use1');
reg1.test('use2');
reg1.test('use3');
reg1.test('us');
限定字符
- ?
表示紧挨着?前面的那个字符可有可无
var text = /user?/; // 表示匹配use字符必须出现 但?前面的字符r可有可无
text.test('use'); // true
text.test('us'); // false
text.test('user'); // true
text.test('eeusertt'); // true
匹配*前面的字符出现次数>=0 没有此字符或者一次多次重复出现
var reg1 = /abc*d/; // 表示匹配某一串字符里是否有abcd字符,其中c字符可有可无 可出现多此
console.log(reg1.test('abd'));
console.log(reg1.test('abcd'));
console.log(reg1.test('abcccccccccd'));
console.log(reg1.test('abbbbbcccccccd'));
console.log(reg1.test('abbbbbcccccccdddddddddd'));
匹配+前面的字符出现次数>0 一次或多次重复出现
var reg1 = /abc+d/; // 表示匹配某一串字符里是否有abcd字符,其中c字符 可出现多次
console.log(reg1.test('abd'));
console.log(reg1.test('abcd'));
console.log(reg1.test('abcccccccccd'));
console.log(reg1.test('abbbbbcccccccd'));
console.log(reg1.test('abbbbbcccccccdddddddddd'));
- {}
匹配{n}前面的字符必须出现n次 n必须为>=0的数,还可以写成区间 注意:区间用,隔开 ,前后不能加空格
var reg1 = /abc{3}d/; // 表示某一串字符里包含abcd字符,其中c字符必须出现3次
console.log(reg1.test('abcccdddd'));
console.log(reg1.test('abccccdddd'));
console.log(reg1.test('aaaaaaaaaaaabcccdddd'));
console.log(reg1.test('aaaaaaaaaaaabcdddd'));
console.log(reg1.test('aaaaaaaaaaaabccfcdddd'));
var reg1 = /abc{0,3}d/; // 表示某一串字符里包含abcd字符,其中c字符可出现0 - 3次
console.log(reg1.test('abdddd'));
console.log(reg1.test('abcdddd'));
console.log(reg1.test('qweerabccdddd'));
console.log(reg1.test('aaaaaaaaaaaabcccdddd'));
console.log(reg1.test('aaaaaaaaaaaabcdddd'));
console.log(reg1.test('aaaaaaaaaaaabccfcdddd'));
- ()
匹配某一串字符中是否出现正则中的字符, 括号里面可写多个或单个字符,其中括号中的单个或多个字符可重复出现, 如果是多个字符 表示的是出现多个时 按照()里面的字符顺序连着出现
var reg1 = /(a)+d/;
var reg1 = /(abc)+d/; // 表示某串字符中是否包含abcd,其中括号中的字符出现多次>0
console.log(reg1.test('abdddd'));
console.log(reg1.test('abcdddd'));
console.log(reg1.test('qweerabccdddd'));
console.log(reg1.test('aaaaaaaaaaaabcccdddd'));
console.log(reg1.test('aaaaaaaaaaaabcdddd'));
console.log(reg1.test('aaaaaaaaaaaabccfcdddd'));
var reg1 = /(abc)*d/; // 表示某串字符中是否包含abcd,其中括号中的字符出现多次>=0
var reg1 = /(abc){3}d/; // 表示某串字符中是否包含abcd,其中括号中的字符出现3次
var reg1 = /(abc){3,6}d/; // 表示某串字符中是否包含abcd,其中括号中的字符出现3次-6次
- |
表达式1 | 表达式2 要么是表达式1 或者 表达式2
var reg1 = /a(cat|dog)/; // 匹配要出现a字符 后面要么是cat 要么是dog
// var reg1 = /a(cat)+|(dog)/; // 匹配要出现a字符 后面要么是cat 要么是dog
console.log(reg1.test('acatdog'));
console.log(reg1.test('acat'));
console.log(reg1.test('adog'));
console.log(reg1.test('apig'));
console.log(reg1.test('amonkey'));
var reg1 = /acat|dog/; // 匹配要么acat 要么dog
字符类
- []
[abc] 匹配abc字符任意一个字符,匹配所有小写[a-z] 匹配所有大写[A-Z] 匹配所有数字[0-9]
var reg1 = /[a-z]+/; // 匹配一串字符是否出现a-z的小写字母,出现任意一个一次或多次匹配成功
console.log(reg1.test('acatdog'));
console.log(reg1.test('acat'));
console.log(reg1.test('adog'));
console.log(reg1.test('apig'));
console.log(reg1.test('amonkey'));
console.log(reg1.test('1234'));
var reg1 = /[A-Z]+/; // 匹配一串字符是否出现A-Z的大写字母,出现任意一个一次或多此匹配成功
console.log(reg1.test('acatdog'));
console.log(reg1.test('adog'));
console.log(reg1.test('1234'));
console.log(reg1.test('1234A'));
console.log(reg1.test('1234U'));
console.log(reg1.test('1234owqeqw'));
var reg1 = /[0-9]+/; // 匹配一串字符是否出现0-9的数字,出现任意一个一次或多此匹配成功
console.log(reg1.test('acatdog'));
console.log(reg1.test('adog'));
console.log(reg1.test('1234'));
console.log(reg1.test('1234A'));
console.log(reg1.test('1234U'));
console.log(reg1.test('1234owqeqw'));
- ^
取非(注意:必须放在[]里面 才表示脱字符)[^0-9]后面所有的非数字字符
var reg1 = /[^0-9]/; // 匹配除了数字以外 有其他任意字符就匹配成功
console.log(reg1.test('acatdog'));
console.log(reg1.test('adog'));
console.log(reg1.test('1234'));
console.log(reg1.test('1234A'));
console.log(reg1.test('1234U'));
console.log(reg1.test('1234owqeqw'));
console.log(reg1.test('123$'));
console.log(reg1.test('123*'));
console.log(reg1.test('123@'));
元字符
元字符 | 含义 |
---|---|
\d | 所有的数字字符 |
\w | 单词字符(英文、数字及下划线) |
\s | 空白符(包含Tab、换行符、空格 \n) |
\D | 非数字字符(匹配出现除数字字符之外的其他字符) |
\W | 非字母、数字、下划线。 |
\S | 非空白字符(匹配出现除空白符之外的其他字符) |
var reg1 = /\d/; // 只要出现数字字符就匹配成功
console.log(reg1.test('1234'));
console.log(reg1.test('asd'));
var reg1 = /\w/; // 只要出现数字 字母 下划线就匹配成功
console.log(reg1.test('12'));
console.log(reg1.test('000'));
console.log(reg1.test('_$#@!'));
console.log(reg1.test('$#@!'));
var reg1 = /\s/; // 只要出现空格 TAB 换行\n就匹配成功
console.log(reg1.test('12'));
console.log(reg1.test('1 2'));
console.log(reg1.test('1 2'));
console.log(reg1.test(`1
2`));
console.log(reg1.test('23e\n'));
var reg1 = /\S/; // 只要出现了非空白符的其他字符就匹配成功
console.log(reg1.test(' '));
console.log(reg1.test(' '));
console.log(reg1.test('\n'));
console.log(reg1.test(`
`));
console.log(reg1.test('1 2'));
console.log(reg1.test('1 2'));
console.log(reg1.test(`1
2`));
console.log(reg1.test('23e\n'));
var reg1 = /\D/; // 只要出现了非数字子符的其他字符就匹配成功
console.log(reg1.test(' '));
console.log(reg1.test('123'));
console.log(reg1.test('456'));
console.log(reg1.test(`
`));
console.log(reg1.test('1 2'));
console.log(reg1.test('1 2'));
console.log(reg1.test(`1
2`));
console.log(reg1.test('23e\n'));
var reg1 = /\W/; // 只要出现非字母、数字、下划线则匹配成功
console.log(reg1.test('12'));
console.log(reg1.test('000'));
console.log(reg1.test('_$#@!'));
console.log(reg1.test('$#@!'));
特殊的字符
- .
代表任意字符 但不包含换行符(\n 或者 换行)
var reg1 = /./; // 只要有除换行符之外的其他任意字符 则匹配成功
console.log(reg1.test('12'));
console.log(reg1.test('\n'));
console.log(reg1.test(` \n`));
console.log(reg1.test(`\n`));
console.log(reg1.test(`
`)); // true 因为除换行还包含了空白字符
console.log(reg1.test(`
`)); // false
- ^ 与 $
var reg1 = /^abc$/; // 以abc开头并且以abc结尾 表示有且仅有abc三个字符 且顺序不能变
var reg1 = /^abc/; // 以abc开头
var reg1 = /abc$/; // 以abc结尾
console.log(reg1.test('aaaaabc'));
console.log(reg1.test('aabc'));
console.log(reg1.test('aabc'));
console.log(reg1.test(`abc`));
三个属性i,g,m
正则表达式的属性(也称修饰符),可以在全局搜索中不区分大小写:
i - ignoreCase
执行匹配时忽略大小写
// i
var reg1 = /abc/i;
console.log(reg1.test('Abc'));
console.log(reg1.test('aaaaadcddD=ABc'));
console.log(reg1.test('aafghabcmmn'));
console.log('Abc'.match(reg1));
console.log('aaaaadcddD=ABc'.match(reg1));
console.log('aafghabcmmnABC'.match(reg1));
g - global
执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
// g
var reg=/ab/;
var str="ababababab";
str.match(reg);//["ab"],只查找到第一个匹配值便返回
reg=/ab/g;
str.match(reg); // ["ab","ab","ab","ab","ab"],全局查找,把所有匹配值均返回
var reg1 = /abc/g;
console.log(reg1.test('Abc')); // false
console.log(reg1.test('aaaaadcddD=ABc')); // false
console.log(reg1.test('aafghabcmmnABCabc')); // false
console.log('Abc'.match(reg1)); // null
console.log('aaaaadcddD=ABc'.match(reg1)); // null
console.log('aafghabcmmnABCabc'.match(reg1)); // ['abc', 'abc']
var reg1 = /abc/gi; // 既要全局查找 也要忽略abc的字符大小写
console.log(reg1.test('Abc')); // true
console.log(reg1.test('aaaaadcddD=ABc')); // true
console.log(reg1.test('aafghabcmmnABCabc')); // true
console.log('Abc'.match(reg1)); // ['Abc']
console.log('aaaaadcddD=ABc'.match(reg1)); // ['ABc']
console.log('aafghabcmmnABCabc'.match(reg1)); // ['abc', 'ABC', 'abc']
m - multiline
执行多行匹配
var reg=/a/g;
var str="abcdea";
str.match(reg);// ["a","a"]
reg=/^a/g; // 插入符^指的是以字母a为开头
str.match(reg);//["a"]
str="abcde\na";
str.match(reg); // ["a"],还没有多行匹配属性
reg=/^a/gm;
str.match(reg); // ["a","a"] 换行第二行也是字符a开头的
补充-字符串match()
语法:str.match(regexp)
参数:regexp
为一个正则表达式对象。如果传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj)
将其转换为一个 [RegExp](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp)
。如果你没有给出任何参数并直接使用 match() 方法 ,你将会得到一 个包含空字符串的 Array
:[""] 。
返回值:一个Array
,其内容取决于 global(g
)标志的存在与否,如果未找到匹配则为null
- 如果使用 g 标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组。
var reg = /ab/;
reg = /ab/g;
str.match(reg); // ["ab","ab","ab","ab","ab"]
- 如果未使用 g 标志,则仅返回第一个完整匹配及其相关的捕获组(
Array
)。 在这种情况下,返回的项目将具有如下所述的其他属性:groups
: 一个命名捕获组对象,其键是捕获组名称,值是捕获组,如果未定义命名捕获组,则为undefined
。index
: 匹配的结果的开始位置 请问荣誉i哦怕【】、 ··input
: 搜索的字符串。
var str = 'abcdefghsnnsadsamdnsamhhh';
console.log(str.match()); // ['', index: 0, input: 'abcdefghsnnsadsamdnsamhhh', groups: undefined]
console.log(str.match('abc')); // 相当于 str.match(/abc/);
console.log(str.match('nns'));
console.log(str.match('h')); // ['h', index: 7, input: 'abcdefghsnnsadsamdnsamhhh', groups: undefined]
var reg = /ab/;
var str = "ababababab";
str.match(reg); // ['ab', index: 0, input: 'ababababab', groups: undefined]
- 如果没有匹配到就返回null
var reg = /ab/;
var str = "cccccc";
str.match(reg); // null
例子
- 写一个验证用户输入是否输入的为11位的数字
var userIn = prompt("请输入一个11位的数字");
// \d匹配数字 {11} $匹配到末尾
var userReg = /^\d{11}$/
if (userReg.test(userIn)) {
alert("输入正确");
} else {
alert("输入错误");
}
- 写一个正则表达式,检验字符串首尾是否含有数字。
var num1 = /^\d|\d$/
var num2 = 'asdd1dsa2'
console.log(num1.test(num2));
- 匹配6-8位的任意字符
var reg = /^.{6,8}$/;
reg.test(123); // false
reg.test(123456789); // false
reg.test(12345678); // true
- 表单综合案例
<form action="">
用户名:<input type="text">*6~8位<br>
手机号:<input type="number" name="" id="" value="" /><br>
邮 箱:<input type="email" name="" id="" value="" /><br>
密 码:<input type="text">*6~16位,必须包含字母、数字、_<br>
<button type="button" class="button">注册</button>
</form>
<script>
var btn = document.querySelector('.button');
btn.onclick = function () {
var input = document.querySelectorAll("input");
if (!(/^.{6,8}$/).test(input[0].value)) {
alert("用户名必须为6~8位"); /^.{6,8}$/
return;
}
if (!(/^\d{11}$/).test(input[1].value)) {
alert("手机号不正确"); 11为数字 /^\d{11}$/
return;
}
// .代表是除了换行的任意字符 \.代表必须出现.符号
if (!(/^\w+@\w+\.(com|cn)$/).test(input[1].value)) {
alert('邮箱格式输入不正确') /^\w+@\w+\.com|cn$/
return;
}
if (!(/^\w+{6,16}$/).test(input[2].value)) {
alert('密码格式有误')
return
}
alert("注册成功")
}
</script>
// /^[\u4E00-\u9FA5]{1,5}$/
标签:字符,console,log,正则表达式,reg1,var,test
From: https://www.cnblogs.com/Kongqingzhi/p/16633695.html