JavaScript进阶 - 正则表达式

文章目录


# 一、什么是正则表达式

正则表达式是用于匹配字符串中字符组合的模式。
正则表达式通常被用来检索,替换那些符合某个模式的文本。

二、正则表达式在JavaScript中使用

利用RegExp对象来创建正则表达式

var regexp = new RegExp(/表达式/);

通过字面量创建

var 变量名 = /表达式/;

三、测试正则表达式test

test() 正则对象方法,用于检测字符串是否符合该规则。

<script>
    var regexp = new RegExp(/123/);  // 只要包含有123就为true
    console.log(regexp.test(123));  // true
    console.log(regexp.test('abc'));  // false
</script>

四、正则表达式的组成

一个正则表达式可以由简单的字符组成,比如 /abc/
也可以是简单和特殊字符的组合,比如 /ab*c/.
特殊字符也被称为元字符,在正则表达式中是具有特殊意义的专用符号。

特殊字符

^ : 匹配行首的文本(以谁开始)
$ : 匹配行尾的文本(以谁结束)

<script>
    var regexp = new RegExp(/^123/);  // 表示以123开头
    console.log(regexp.test(1234));  // true
    console.log(regexp.test(1123));  // false
</script>
<script>
    var regexp = new RegExp(/123$/);  // 表示以123结尾
    console.log(regexp.test(1234));  // false
    console.log(regexp.test(1123));  // true
</script>
<script>
    var regexp = new RegExp(/^123$/);  // 表示必须是123,其他的都不行
    console.log(regexp.test(123));  // true
    console.log(regexp.test(1123));  // false
</script>

五、字符类

[ ]表示有一系列字符可供选择,只有匹配其中一个就可以了。

<script>
    var regexp = new RegExp(/[123]/);  // 匹配其中的一个就可以
    console.log(regexp.test(1456));  // true
    console.log(regexp.test(246));  // true
</script>
<script>
    var regexp = new RegExp(/^[123]$/);  // 表示只有是 a,b,c里面的其中一个才为true
    console.log(regexp.test(123));  // false
    console.log(regexp.test(2));  // true
</script>

[-] :方括号范围符 -

<script>
    var regexp = new RegExp(/[a-z]/);  // 表示a-z之间的任意一个字符都可以
    console.log(regexp.test('a'));  // true
    console.log(regexp.test('z'));  // true
</script>

[ ]里面的^表示取反

<script>
    var regexp = new RegExp(/[^a-z]/);  // []里面的^表示取反的意思
    console.log(regexp.test('a'));  // false
    console.log(regexp.test(1));  // true
</script>

六、量词符

* : 重复零次或更多次
+ :重复一次或更多次
:重复零次或一次
{n} :重复n次
{n,} :重复n次或更多次
{n, m} :重复n到m次

<script>
    var regexp = new RegExp(/^[a-z]{6}$/);  // {}表示重复前面的字符多少次
    console.log(regexp.test('aaaaaa'));  // true
    console.log(regexp.test('a'));  // flase
</script>

练习 :用户名检测

<body>
    <input type="text"><span>请输入用户名</span>
    <script>
        // 正则表达式
        var regexp = new RegExp(/^[a-zA-Z0-9_-]{3,6}$/);  // {}表示重复前面的字符多少次
        // 获取元素
        var input = document.querySelector('input');
        var span = document.querySelector('span');
        input.addEventListener("blur", function () {
            if (regexp.test(input.value)) {
                span.style.color = 'green';
                span.innerHTML = "用户名合法";
            } else {
                span.style.color = 'red';
                span.innerHTML = "用户名不合法";
            }
        });
    </script>
</body>

七、预定义类

预定义类指的是某些常见模式的简写方式

\d:匹配0-9之间任意一个数字,相当于[0-9]
\D:匹配除0-9之外任意字符,相当于[^0-9]
\w:匹配任意字母,数字和下划线,相当于[A-Za-z0-9_]
\W:匹配任意除字母,数字和下划线之外任意字符,相当于[^A-Za-z0-9_]
\s:匹配空格(换行符,制表符,空格符等),相当于[\t\r\n\v\f]
\S:匹配除空格之外任意字符,相当于[^\t\r\n\v\f]

八、正则替换

replace()方法可以实现替换字符串操作,用来替换的参数可以是一个字符串或是一个正则表达式

stringObject.replace(regexp/substr, replacement)

正则表达式参数

**/表达式/[switch] **

switch 按照什么样的模式来匹配,有三种值。
g : 全局匹配
i :忽略大小写
gi :全局匹配,忽略大小写

<script>
    var text = '激情四射, 激情四射';
    var text1 = text.replace(/激情/, '**');
    console.log(text1);  // **四射, 激情四射
    var text2 = text.replace(/激情/g, '**');
    console.log(text2);  // **四射, **四射
</script>
上一篇:ORACLE逗号分割的字符串转多行(转载)


下一篇:js正则表达式及RegExp转义踩坑实录