JS-正则表达式

正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)
语法
/正则表达式主体/修饰符(可选)

正则的第一种写法

var reg=new RegExp('a');
var str='abcdefg';
alert(reg.test(str));   //返回bool值,代表是否匹配成功

正则表达式的第二种写法
perl风格 古老的语言

var re = /a/
var str='abcdefg';
re.test(str);

[ ] 中括号:匹配其中的某一个字符

var str = prompt();
var reg = /[abcde]/;//匹配是否有abcde中的字符
console.log(reg.test(str));

[ a-z ] 匹配所有小写字母

[0-9] == \d 匹配任意一个数字( )

小括号:分组:小括号里面的内容作为整体进行匹配
小括号用于分组,竖线作为间隔代表“或者”的含义
/(ab) | (cd)/ 匹配'ab' 或者 'cd'
/(a|b)cd/ 匹配 'acd' 或者 'bcd'
注意:小括号、竖线不要放在 [ ] 内(无意义)

| : 或,跟js中的(||)一样
^:排除(除了) 类似js中的(!)

^ (不在中括号里)匹配字符串开头
$ 匹配结尾

var reg = /^[a-z]$/;//小写字母 开头并且小写字母结尾,中间不能有字符(完整匹配)
/^$/这样的正则代表完整匹配

转义字符:元字符
\d ---- [0-9] 数字
\w -----[a-z0-9_A-Z] 数字,字母,下划线
\s --- 空白字符

\D -----[^0-9] 非数字
\W -----[^a-z0-9_] 非数字,字母,下划线
\ S -----非空白字符
. -----全部字符
b -----匹配单词边界
\B -----匹配 非 单词边界
\0(数字0) -----匹配 NUL 字符
\n -----匹配 换行符
\f -----匹配 换页符
\r -----匹配 回车符
\t -----匹配 制表符
\v -----匹配 垂直制表符
\u4e00 - \u9fa5 验证中文

量词:(单位名称)
{n} ---匹配n次

{n,m} ---最少n次,最多m次;

QQ号验证  /^[1-9]\d{4,10}$/

{n,} ---最少n次,最多不限

+  == {1,}最少为一个

? {0,1} 可有可无,最多一个

*     {0,} 可以有也可以没有,个数不限

/(ab|cd){2}/ 匹配字符串"ab" 或者 "cd" 的2次,或者abcd 结果为:abab cdcd abcd cdab

匹配大小写不一样的字母怎么办?
var re=new RegExp('a','i')
正则对象中有一个参数,可以传入对应的值,i 代表让正则不区分大小写;
i:忽略大小写
var re= /a/i

g:全局查找
reg = /\d+/ g
g: 代表全局所有 (global)

m: 多行查找(必须与g一起实用,并且,当使用^和$模式时才会起作用)

正则对象的方法:
test方法
该方法用来测试某个字符串是否与正则匹配,匹配就返回true,否则返回false

compile方法
该方法的作用是能够对正则表达式进行编译,被编译过的正则在使用的时候效率会更高,适合于对一个正则多次调用的情况下,如果对一个正则只使用一两次,那么该方法没有特别显著的效应

var reg=/[abc]/gi;
console.log(reg.test('a'));
reg=/[cde]/gi;
console.log(reg.test('a'));
reg.compile(reg);
console.log(reg.test('a'));

exec方法
返回的是一个数组,数组元素为匹配的子字符串

支持正则的字符串方法
search
查找第一次匹配的子字符串的位置,如果找到就返回一个number类型的index值,否则返回-1

replace
该方法用来将字符串中的某些子串替换为需要的内容,接受两个参数,第一个参数可以为正则或者子字符串,表示匹配需要被替换的内容,第二个参数为被替换的新的子字符串

split
将一个字符串拆分成一个数组,它接受一个正则或者子字符(串)作为参数,返回一个数组

match
接受一个正则作为参数,用来匹配一个字符串,返回一个数组

例子:

<script>
        var reg = new RegExp("b");//写法1
        var str = prompt();
        var reg = /b/;// 写法2  匹配是否存在b
        var reg = /[abcde]/;//匹配是否有abcde中的字符
        var reg = /[a-z]/;//匹配所有小写字母
        var reg = /(ab)|(cd)/;//ab  或 cd
        var reg = /(a|b)cd/;//acd  或bcd
        var reg = /[^a-z]/;//不能有小写字母
        var reg = /^[a-z]/;//小写字母开头
        var reg = /^[a-z]$/;//小写字母 开头并且小写字母结尾,中间不能有字符(完整匹配)
        var reg = /\d/;//匹配0-9的数字[0-9];
        var reg = /./;//匹配所有字符
        var reg = /\./;//转义字符z
        var reg = /\d{6}/;//6个数字(超过也为true)
        var reg = /a\d{6,8}a/;//六到8个数字,前后做好限定,否则会自动过滤掉多余的数字
        var reg = /^[1-9]\d{4,10}$/;//5-11位,完整匹配
        var reg = /\w/;//-[a-z0-9_A-Z]     数字,字母,下划线
        var reg = /\s/;//空格
        var reg = /\D/;//不为数字
        var reg = /^\d+.{3,}$/;// 必须以数字开头,数量一个以上,紧接着任意字符至少三个,并以之结尾
        var reg = /^\d?$/;//以数字开头 一个数字或者没有  {0,1} 可有可无,最多一个
        var reg = /^\d*$/;//{0,} 可以有也可以没有,个数不限
        var reg = /zhangsan/i;//i:忽略大小写
        var reg = /\d+/g;//g: 代表全局所有  (global)
        console.log(reg.test(str));
    </script>

案例1:密码强度

<input type="text" id="pwd"/>
        <button>登录</button>
        <script>
            var input = document.querySelector("#pwd");
            var numReg = /\d+/;
            //var letterReg = /^[a-zA-Z]$/;
            var letterReg = /[a-z]+/i;
            var charReg = /[^0-9a-z]+/i;
            //存储三个正则的验证结果
            
            document.querySelector("button").onclick = function(){
                var arr = [];
                var pwd = input.value;
                
                arr.push(numReg.test(pwd));
                arr.push(letterReg.test(pwd));
                arr.push(charReg.test(pwd));
                console.log(arr);
                var arr1 = arr.filter(function(item){
                    return item;
                })
                
                if(arr1.length === 1) alert("弱");
                else if(arr1.length === 2) alert("中");
                if(arr1.length === 3) alert("强");
                
            }
        </script>

附:扩展正则案例

只能用数字开头,长度在6--18位之间 /^\d.{5,17}$/

以字母开头,数字结尾,中间任意一个字符 /^[a-z].\d$/i

密码不能少于6位的字符 /^.{6,}$/

以a开头 b字符至少出现2个,至多出现6个(b连续出现) /^a.*b{2,6}/

变量的命名正则表达式(不能用数字开头 由字母、数字、下划线 、组成) /^[a-z_][\w]*/

开头为0的2或者三位数字加上 - 开头为非零的八位数字结尾是1到4位的分机号
/^0\d{2,3}-[1-9]\d{7}-\d{1,4}$/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • 正则表达式功能: 测试字符串的某个模式。例如对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信...
    DecadeHeart阅读 580评论 0 1
  • 作为一名攻城狮,对正则表达式一定不会很陌生,但在平时开发中有时依然会遇到这样或那样的问题。本文从基础出发,本着让初...
    艾特TT阅读 2,003评论 3 12
  • 第一部分 基础知识 一、正则申明方式 1、构造函数方式 ● 通过 new 构造一个正则表达式对象,其中第一个参数 ...
    _双眸阅读 26,778评论 2 15
  • 正则表达式俗称火星文(也可能就我这么俗称),正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产...
    感觉不错哦阅读 231评论 0 0
  • 目录 第一章 正则表达式字符匹配攻略 第二章 正则表达式位置匹配攻略 第三章 正则表达式括号的作用 第四章 正则表...
    Albert_w3阅读 442评论 0 2