正则表达式

创建方式

构造器

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)。 在这种情况下,返回的项目将具有如下所述的其他属性:
    1. groups: 一个命名捕获组对象,其键是捕获组名称,值是捕获组,如果未定义命名捕获组,则为 undefined
    2. index: 匹配的结果的开始位置 请问荣誉i哦怕【】、 ··
    3. 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}$/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值