当前位置: 代码迷 >> 综合 >> JavaScript-14-RegExp
  详细解决方案

JavaScript-14-RegExp

热度:38   发布时间:2023-12-16 00:16:53.0

参考文档:RegExp 和 正则表达式
具体的看文档吧,,我懒得总结了QAQ。。。。啊!!!b小x变懒了。。。。。不开心。。。啊!!!【经典呐喊表情包。。。

创建RegExp对象两种方式

  1. 字面量【不含变量时】:new RegExp(/abc/,‘i’) new RegExp(/\d+/);

    1. 不需要再加转义,即 /\d+/
    2. 提供正则表达式的编译(compilation)状态
    3. 当正则表达式保持为常量时使用字面量
    4. 不会在每一次迭代中都被重新编译
  2. 构造函数【含变量时】:new RegExp(‘abc’,‘i’) new RegExp(’\d+’);

    1. 需要转义,即 ‘\d+’

    2. 提供了正则表达式运行时编译(runtime compilation)

    3. 当正则表达式会改变

    4. 在每一次迭代中都被重新编译

       var s='2019-02-12 12:23:23';for (var i=1;i<=2;i++) {var reg31=new RegExp(`[-: ${i}]`); /* 可以 */// var reg31=new RegExp(`/[-: ${i}]/`);  /* 不行 */console.log(s.split(reg31));}
      

小练习

ps:reg_abc.compile(reg_abc)编译

console.log('****************【一】************');
var reg1=/\d+/;
// var reg2=new RegExp(/\d+/);
var reg2=new RegExp('\\d+');
console.log(reg1);
console.log(reg2);
var s='124342';
console.log(reg1.test(s));
console.log(reg2.test(s));console.log('****************【二】************');
var reg21=new RegExp('abc','i');
console.log(reg21.test('abc')); /* true */
console.log(reg21.test('ABC')); /* true */console.log('****************【三】************');
var s='2019-02-12 12:23:23';
for (var i=1;i<=2;i++) {var reg31=new RegExp(`[-: ${i}]`); /* 可以 */// var reg31=new RegExp(`/[-: ${i}]/`);  /* 不行 */console.log(s.split(reg31));
}
console.log('****************【四】************');
console.log('x(?=y)只有当 x 后面紧跟着 y 时,才匹配 x');
var reg41=new RegExp('abc(?=123)');
console.log(reg41.test('abc1234231asd'));
console.log('abc123qww4342'.match(reg41));
console.log('abc12123qww4342'.match(reg41));console.log('x(?!y)只有当 x 后面不是紧跟着 y 时,才匹配 x');
var reg42=new RegExp('abc(?!123)');
console.log(reg42.test('abcqw1234231asd'));
console.log('abc51234231asd'.match(reg42));var reg43=new RegExp(/\d+(?!\.)/);
console.log(reg43.exec('3.141'));console.log('****************【五】************');
console.log('RegExp.prototype.exec():在目标字符串中执行一次正则匹配操作');
/*当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。*/
var reg51=new RegExp('\\d+');
console.log(reg51.exec('1a2b3c'));console.log('RegExp.prototype.test():测试当前正则是否能匹配目标字符串');
console.log(reg51.test('1a2b3c'));console.log('RegExp.prototype.toString():返回一个字符串,其值为该正则对象的字面量形式');
console.log(reg51.toString());console.log('****************【六】************');
console.log('使用正则表达式改变数据结构,实现交换:');
var reg61=/(\w+)\s(\w+)\s(\w+)\s(\w+)/;
var str61="Apple Banana Orange Water";
var newstr=str61.replace(reg61,"$4--$2--$3--$1");
console.log(newstr);console.log('使用exec的正则表达式:');
var text = "First line\nsecond line";
var regex = /(\S+) line\n?/y;var match = regex.exec(text);
console.log(match[1]);  // prints "First"
console.log(regex.lastIndex); // prints 11var match2 = regex.exec(text);
console.log(match2[1]); // prints "Second"
console.log(regex.lastIndex); // prints "22"var match3 = regex.exec(text);
console.log(match3);// prints "null"console.log('从 URL 中提取子域名');
var url = "http://xxx.domain.com";
var reg63=/[^.]+/g
console.log(url.match(reg63));
  相关解决方案