正则表达式随笔

  1. 正则表达式文档-MDN

  2. 对全局匹配来说,strmatch方法返回所有匹配的值组成的数组(如果match不到匹配的,返回null), 而 regexec方法一次只返回一个匹配的值。 参考文档:正则里exec跟match的区别

    但是matchreg为全局匹配时,无法获取捕获组的值, exec可以获取。

  1. 判断输入框里是否有除数字以外的字符时,因为输入框里的value可能是这种格式'123a''123'’123'a123',用NumberparseInt需要考虑的情况比较多,用正则表达式来判断比较简单。

    const reg = /\D/
    

    上述reg表示除数字外的任意字符, 注意正则表达式后面不要加 g, 因为exec的全局匹配不是真正的全局匹配,比如 /\d/g.exec('1abc23d5') 会首先返回 1,运行第二次返回 2,依次检索到最后一个并返回5,这个时候 再次运行就会返回null,而如果不加g的话,就会一直返回匹配的第一个,这样只要有匹配的就会把匹配的第一个值返回,而不会出现返回null 的情况

    reg.test(value)
    

    不管value是字符串类型还是数字类型,只要其中含有除数字以外的字符,就返回true,上述方法相当于

    reg.exec(value) !== null
    
  2. 从一个字符串中取出某一部分有以下几种方法。
    假设有一个字符串str, 要取出中括号中的内容,并将其拼接在一起:

    1
    const str = '【哈哈】随便几个字【名字】';

    方法1:

    1
    const result = str.replace(/【(.*)】.*【(.*)】/, '$2:$1'); // "名字:哈哈"

    方法2:

    1
    2
    3
    const reg = /【(.*)】.*【(.*)】/;
    const matchs = str.match(reg); // ["【哈哈】随便几个字【名字】", "哈哈", "名字"]
    const result = `${matchs[2]}: ${matchs[1]}`; // "名字:哈哈"

    方法3:

    1
    2
    3
    const reg = /【(.*)】.*【(.*)】/;
    const matchs = reg.exec(str); // ["【哈哈】随便几个字【名字】", "哈哈", "名字"]
    const result = `${matchs[2]}: ${matchs[1]}`; // "名字:哈哈"

    这里要注意,对于汉字,匹配的时候不能使用\w,因为\w只匹配字母数字和下划线