正则表达式

作者: TimeLesser | 来源:发表于2016-04-15 16:48 被阅读67次

问答

\d 数字字符
\w 单词字符,字母、数字下划线
\s 空白符
[a-zA-Z0-9] 字母、数字
\b 单词边界
. 除了回车符和换行符之外的所有字符
* 出现任意次(出现零次或多次)
+ 出现一次或多次(至少出现一次)
? 出现零次或一次(最多出现一次)
x{3} 匹配x出现三次的
^ 以xxx开头
$ 以xxx结尾

贪婪模式和非贪婪模式指什么?
在正则匹配的量词中关于匹配原则的一些问题,比如{3,5}这个量词,要是在句子中出现了十次,那么他是每次匹配三个还是五个,反正3、4、5都满足3~5的条件

量词在默认下是尽可能多的匹配的,也就是大家常说的贪婪模式

'123456789'.match(/\d{3,5}/g); //["12345", "6789"]

既然有贪婪模式,那么肯定会有非贪婪模式,让正则表达式尽可能少的匹配,也就是说一旦成功匹配不再继续尝试,做法很简单,在量词后加上?
即可

'123456789'.match(/\d{3,5}?/g); //["123", "456", "789"]

代码题

1.写一个函数trim(str),去除字符串两边的空白字符

function trim(str) {
        re=/^\s+|\s+$/g;
        return str.replace(re, '')
      
    }
    var str=trim('   1231dfwf   ');
    alert('('+str+')');

2.使用实现 addClass(el, cls)、hasClass(el, cls)、removeClass(el,cls),使用正则

//提示: el为dom元素,cls为操作的class, el.className获取el元素的class
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    div {
        height: 50px;
        background: yellow;
    }
    
    .width {
        width: 100px;
    }
    
    .height {
        height: 100px;
    }
    
    .bg {
        background: red;
    }
    </style>
</head>

<body>
    <div>

    </div>
    <script>
    function classOperation(el, cls) {

        var ele = document.getElementsByTagName(el)[0];
        var re = new RegExp("\\b" + cls + "\\b", "g");
        var hasClass = function() {
            return re.test(ele.className);
        }
        var addClass = function() {
            ele.className += ' ' + cls;
        }
        var removeClass = function() {
            ele.className = (ele.className).replace(re, '');
        }
        !hasClass() ? addClass() : removeClass();
        console.log(ele.className);

    }
    classOperation('div', 'bg');//bg
    classOperation('div', 'height');//bg height
    classOperation('div', 'width');//bg height width
    classOperation('div', 'width');//bg height 
    </script>
</body>

</html>

3.写一个函数isEmail(str),判断用户输入的是不是邮箱

<body>
    <input type="text">
    <input type="button" value="验证邮箱">
    <script>
    var oinput = document.getElementsByTagName('input');

    oinput[1].onclick = function checkEmail() {
        var email = oinput[0].value;
        re = /^\w+@[a-z0-9]+(\.[a-z]+){1,3}$/;
        str = re.test(email) ? '验证通过' : '请输入合法邮箱';
        alert(str);

    }
    </script>
</body>

4.写一个函数isPhoneNum(str),判断用户输入的是不是手机号

<body>
<input type="text">
<input type="button" value="验证手机号">
<script>
var oinput = document.getElementsByTagName('input');

oinput[1].onclick = function checkPhoneNumber() {
    var phonenumber = oinput[0].value;
    re = /^1[34578]\d{9}$/;
    str = re.test(phonenumber) ? '验证通过' : '请输入合法手机号';
    alert(str);

}
</script>

</body>

5.写一个函数isValidUsername(str),判断用户输入的是不是合法的用户名(长度6-20个字符,只能包括字母、数字、下划线)

<body>
    <input type="text">
    <input type="button" value="验证用户名">
    <script>
    var oinput = document.getElementsByTagName('input');

    oinput[1].onclick = function isValidUsername() {
        var username = oinput[0].value;
        re = /w+/;
        if (username.length>=6&&username.length<=20) {
            str = re.test(username) ? '验证通过' : '用户名只能包括字母、数字、下划线,请删除非法字符';
            alert(str);
        }
        else {
            alert("请输入字符长度为6-20的用户名")
        }
        

    }
    </script>
</body>

6.写一个函数isValidPassword(str), 判断用户输入的是不是合法密码(长度6-20个字符,包括大写字母、小写字母、数字、下划线至少两种)

<body>
    <input type="text">
    <input type="button" value="验证用户密码">
    <script>
    var oinput = document.getElementsByTagName('input');
    var arr = [];
    oinput[1].onclick = function isValidUsername() {
        var username = oinput[0].value;
        username = username.split('').sort().join('');

        var up = username.match(/[A-Z]/);
        var low = username.match(/[a-z]/);
        var num = username.match(/[0-9]/);
        var botline = username.match(/_/);
        arr = [up, low, num, botline];
        var newarr = [];
        for (var i = 0; i < arr.length; i++) {
            if (arr[i]) {
                newarr.push(arr[i])
            }
        }

        if (username.length >= 6 && username.length <= 20) {
            str = newarr.length >= 2 ? '验证通过' : '密码包括大写字母、小写字母、数字、下划线至少两种,请删除非法字符';
            alert(str);
        } else {
            alert("请输入字符长度为6-20的用户密码")
        }

        console.log(newarr);


    }
 
    </script>
</body>

7.写一个正则表达式,得到如下字符串里所有的颜色(#121212)

var re = /*正则...*/
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee #fd2 "
alert( subj.match(re) ) // #121212,#AA00ef
var re = /#\w{6}/g;
    var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee #fd2 "
    console.log(subj.match(re)) // #121212,#AA00ef

8.下面代码输出什么? 为什么? 改写代码,让其输出hunger, world.

var str = 'hello "hunger" , hello "world"';var pat = /".*"/g;str.match(pat);
var str = 'hello "hunger" , hello "world"';
    var pat = /"[^""]+"/g;
    alert(str.match(pat));

9.补全如下正则表达式,输出字符串中的注释内容. (可尝试使用贪婪模式和非贪婪模式两种方法)

str = '.. <!-- My -- comment \n test --> .. <!----> .. '
re = /.. your regexp ../
str.match(re) // '<!-- My -- comment \n test -->', '<!---->'

贪婪模式

str = '.. <!-- My -- comment \n test --> .. <!----> .. '
re = /<!--[^>]*-->/g;
console.log(str.match(re))  // '<!-- My -- comment \n test -->', '<!---->'

非贪婪模式

str = '.. <!-- My -- comment \n test --> .. <!----> .. '
re = /<!--[^>]*?-->/g;
console.log(str.match(re))  // '<!-- My -- comment \n test -->', '<!---->'
感觉没有什么区别啊,不知道老师是考察的哪个知识点????

10.补全如下正则表达式

var re = /* your regexp */
var str = '<> <a href="/"> <input type="radio" checked> <b>'
str.match(re) // '<a href="/">', '<input type="radio" checked>', '<b>'

补全后

 var re = /<[^>]+>/g;
 var str = '<> <a href="/"> <input type="radio" checked> <b>'
console.log(str.match(re));  // '<a href="/">', '<input type="radio" checked>', '<b>'

相关文章

  • Linux命令行与Shell脚本编程大全-shell正则表达式

    本章内容: 定义正则表达式 了解基本正则表达式 扩展正则表达式 创建正则表达式 定义正则表达式 正则表达式是你定义...

  • 正则相关

    正则表达式基本语法 正则表达式常见字符 正则表达式特殊字符 正则表达式数量词 正则表达式边界匹配 正则表达式逻辑或...

  • 正则表达式系列-1

    正则表达式系列-1正则表达式系列-2正则表达式系列-3正则表达式系列-4 什么是正则表达式 正则表达式就是用事先定...

  • 正则表达式

    正则表达式 - 教程正则表达式 - 简介正则表达式 - 语法正则表达式 - 元字符正则表达式 - 运算符优先级正则...

  • Python基础入门 - 正则表达式与综合实战

    1. 初识正则表达式 1.1 介绍 步骤介绍正则表达式入门及应用正则表达式的进阶正则表达式案例 1.2 正则表达式...

  • Java正则表达式参考

    Java正则表达式入门 java正则表达式应用 深入浅出之正则表达式(一) 深入浅出之正则表达式(二) 正则表达式...

  • 正则表达式

    正则表达式 正则表达式就是记录文本规则的代码 正则表达式常用的元字符 正则表达式常用的限定符 正则表达式举例:这里...

  • Python爬虫(十)_正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • python正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • 正则表达式

    了解正则表达式基本语法 能够使用JavaScript的正则对象 正则表达式简介 什么是正则表达式 正则表达式:用于...

网友评论

    本文标题:正则表达式

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