js 正则

作者: McDu | 来源:发表于2020-07-28 15:12 被阅读0次
  1. 删除URL里的参数
// 移除href里的param
var removeParam = function(param){
    var reg = new RegExp('(\\?|&)' + param + '=[^&]*(&)?', 'g');
    return location.href.replace(reg, function(p0, p1, p2) {
        return p1 === '?' || p2 ? p1 : '';
    })
}
  1. 匹配一个单词
    \b(元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是 \b 并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。 比如 \bhi\b

\bhi\b.*\bLucy\b : 匹配 hi .... Lucy 不能换行,.* 匹配任意数量的不包含换行的字符。

  1. \s 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。
    \w 匹配字母或数字或下划线或汉字等。

\ba\w*\b 匹配以字母a开头的单词——先是某个单词开始处(\b),然后是字母 a, 然后是任意数量的字母或数字(\w*),最后是单词结束处(\b)

\b\w{6}\b 匹配刚好6个字符的单词。

  1. 分支条件

目标:(010)88886666,或022-22334455,或02912345678

实现:1. \(?0\d{2}[) -]?\d{8} :首先是一个转义字符 \( ,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是 )- 或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8}). 不幸的是,刚才那个表达式也能匹配010)12345678或(022-87654321这样的“不正确”的格式。

要解决这个问题,我们需要用到分支条件。正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用 | 把不同的规则分隔开.

0\d{2}-\d{8}|0\d{3}-\d{7} 这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。

  1. 后向引用
    使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

    \b(\w+)\b\s+\1\b 匹配重复的单词。eg: go go

  1. 零宽断言
    为什么叫零宽,用于查找某些内容(但不包括这些内容)之前或之后的东西,它们像 \b ^ $ 指定一个位置(零宽),这个位置满足一定的条件(即断言)。

\b\w+(?=ing\b) 匹配以ing结尾的单词的前面部分(除了ing以外的部分)

(?<=\bre)\w+\b 匹配以re开头的单词的后半部分(除了re以外的部分)

(?<=\s)\d+(?=\s) 匹配以空白符间隔的数字(再次强调,不包括这些空白符)

  1. 负向零宽断言
    想要确保某个字符没有出现,但并不想去匹配它

例如,如果我们想查找这样的单词--它里面出现了字母q,但是q后面跟的不是字母u,我们可以尝试这样:

\b\w*q[^u]\w*\b 匹配包含后面不是字母u的字母q的单词 但是如果多做测试(或者你思维足够敏锐,直接就观察出来了),你会发现,如果q出现在单词的结尾的话,像Iraq,Benq,这个表达式就会出错。这是因为[^u]总要匹配一个字符,所以如果q是单词的最后一个字符的话,后面的 [^u]将会匹配q后面的单词分隔符(可能是空格,或者是句号或其它的什么),后面的\w*\b 将会匹配下一个单词,于是 \b\w*q[^u]\w*\b 就能匹配整个Iraq fighting。负向零宽断言能解决这样的问题,因为它只匹配一个位置,并不消费任何字符。现在,我们可以这样来解决这个问题:\b\w*q(?!u)\w*\b

(?!exp),断言此位置的后面不能匹配表达式exp
例如:
\d{3}(?!\d) 匹配三位数字,而且这三位数字的后面不能是数字;
\b((?!abc)\w)+\b 匹配不包含连续字符串abc的单词。
(?<![a-z])\d{7} 匹配前面不是小写字母的七位数字


https://deerchao.cn/tutorials/regex/regex.htm#negativelookaround

相关文章

  • 正则初解

    title: js验证常用正则表达式date: 2017-03-03 验证 正则表达式 本文介绍js验证常用的正则...

  • JS正则表达式

    JS正则表达式一条龙讲解,从原理和语法到JS正则、ES6正则扩展,最后再到正则实践思路 Stinson 关注 20...

  • 正则详解--程序员必备

    转自: JS正则表达式一条龙讲解,从原理和语法到JS正则、ES6正则扩展,最后再到正则实践思路 温馨提示:文章很长...

  • 前端学习资源整合(二)

    正则 正则 地址JS正则表达式元字符 http://segmentfault.com/a/119000000247...

  • JS基础

    JS基础 JS运算 JS代码块 JS对象 原型对象 GC 正则表达式

  • js 正则表达式

    js 正则表达式

  • JavaScript基础 JavaScript正则表达式

    JS正则表达式:

  • JS正则表达式

    js正则表达式 https://segmentfault.com/a/1190000002471140 正则表达式...

  • JS正则表达式

    @(javascript)[js正则表达式] [toc] JS正则表达式 正则表达式一直是一个令人头疼但却又是十分...

  • 火星文RegExp

    正则基本不陌生 JS中通过RegExp来创建 正则在JS中非常的成熟 创建 可以使用perl的语法var exp...

网友评论

      本文标题:js 正则

      本文链接:https://www.haomeiwen.com/subject/ugvfrktx.html