JSCore

xiaoxiao2025-10-15  4

正课:

正则表达式:

String的正则API:

正则表达式: Regular Expression 什么是: 规定字符串中字符出现规律的规则 比如: 手机号: 1 [345678] 9位数字 电子邮件: 任意字符任意个@任意字符任意个.com|.cn|.net, 何时: 2种:

格式验证:

模糊查找关键词: 如何:

最简单的正则表达式就是关键词本身

字符集: 什么是: 一位字符上,备选字符列表的集合 为什么: 有些字符可能发生变化! 何时: 只要一个字符有多种备选情况时 如何: [备选字列表] 强调: 一个[]只能匹配一位字符! 简写: 如果备选字符列表是连续的,可简写为[x-x] 比如: 一位数字: [0-9] 一位小写字母: [a-z] 一位大写字母: [A-Z] 一位字母:[A-Za-z] 一位字母或数字:[0-9A-Za-z] 一位汉字: [\u4e00-\u9fa5] 车牌号: 1位汉字 1位大写字母 • 五位大写字母或数字

预定义字符集: 什么是: 对常用字符集的简化 包括: \d 一位数字 \w 一位字母数字或下划线 [0-9A-Za-z_] \s 一位空字符: 空格 tab … . 通配符,可匹配所有字符 何时: 如果规则完全匹配时,才能使用预定义字符集, 如果规则不完全匹配,则退一步用自定义[字符集] 问题: 一个字符集只能规定一位字符的变化 无法灵活定义出现的次数

量词: 什么是: 专门规定一个字符集出现次数的规则 何时: 只要定义一位字符集出现的次数 如何: 必须放在一个字符集之后,修饰相邻的前一个字符集 包括2大类:

有明确数量边界: {n,m} 至少n次,最多m次 {n,} 至少n次,多了不限 {n} 必须n次 比如: qq号 \d{5,11}

没有明确数量边界的

* 可有可无,多了不限 ? 可有可无,最多一次 + 至少一次,多了不限

选择和分组: 选择: 其实就是"或" 何时: 如果在多个规则之间选其一匹配即可 如何: 规则1|规则2 分组: 将多个规则合并为一组 为什么: 默认一个量词只能修饰相邻的前一个字符集 何时: 希望一个量词可以修饰之前多个字符集时 如何: (多个规则) 比如: 电子邮件地址: 任意字符任意个@任意字符任意个.com|cn|net .cn .@..(com|cn|net)(.cn)? 问题: .* 或 .+ 容易发生贪婪模式 什么是: 正则表达式默认会匹配最长的符合条件的字符串 解决1: 懒惰模式: 仅匹配最短的符合条件的字符串 如何: (.?) [.@]+@[.@]+.(com|cn|net)(.cn)? 解决2: 限制字符: [^xxx] ^称为"除了" [.@]+@[.@]+.(com|cn|net)(.cn)? 比如: 手机号: +86或0086 空格 1 [3-8] 9位数字 (+86|0086)?\s1[3-8]\d{9} 比如: 我草 卧槽 我操 wo cao 我([艹草操槽]|cao) 比如: 身份证号: 15位数字 2位数字 1位数字或x 后三位整体可有可无,最多一次 \d{15}(\d{2}[0-9X])? 作业: 微 信 wei xin w x

匹配特殊位置: 3种: 字符串开头: ^ 字符串结尾: $ 何时: 只要仅匹配开头的或结尾的字符时 比如: 开头的空字符 ^\s+ 结尾的空字符 \s+$ 同时匹配开头或结尾的空字符: ^\s+|\s+$ 单词边界: \b 包括: ^ $ 空格 标点符号 比如: 每个单词首字母: \b[a-z] 选择一个单词no : \bno\b

String的正则API:

查找关键词: 4种:

查找一个固定的关键词的位置: var i=str.indexOf(“关键词”[,fromi]) var i=str.lastIndexOf(“关键词”) 问题: 不支持正则,只能查找一个固定的关键词

用正则查找一个关键词的位置: var i=str.search(/正则/) /xxx/是正则表达式的标识 返回关键词的位置i, 如果找不到,返回-1 问题: 默认正则表达式是区分大小的 解决: 在第二个/后加后缀i ignore忽略 问题: 只能返回位置,不能返回关键词内容

查找关键词的内容: 2种:

只查找一个关键词的内容和位置 var arr=str.match(/正则/i) 返回值: 返回一个数组: [ 0: “关键词”, index: i ] 找不到: null 强调: 只查找第一个关键词 问题: 只能找一个关键词

查找所有关键词的内容: var arr=str.match(/正则/ig) g global 全部 返回值: [ “关键词1”,“关键词2”,…] arr.length 代表关键词个数! 找不到,返回null 小心: 先判断不是null,再使用! 强调: 只包含关键词内容,不包含下标 问题: 只能获得内容,无法获得每个关键词的位置

查找每个关键词的内容和位置: RegExp.exec(str)

替换: 2种:

简单替换: 将所有关键词都替换为一个统一的新值 str=str.replace(/正则/ig,“替换值”)

高级替换: 根据不同的关键词,选择替换不同的新值 str=str.replace(/正则/ig,function(kw){ //function(kw)每找到一个关键词,就自动调用一次 //每次调用时,kw: 自动获得本次找到的关键词 return 新值 }) 衍生: 删除: 其实就是替换为空字符串

切割: 2种:

简单切割: 分隔符是固定的 var arr=str.split(“分隔符”) 固定用法: 将字符串大散为字符数组: var chars=str.split("")

高级切割: 分隔符是变化的 var arr=str.split(/正则/i)

转载请注明原文地址: https://www.6miu.com/read-5037980.html

最新回复(0)