正则表达式进阶--玩转分组、前瞻和后顾( 四 )

示例二:匹配不以特定字符结尾的字符串const regex = /^(?!.*[x|y|z]$).*/;console.log(regex.test("abc")); // trueconsole.log(regex.test("defx")); // false示例三:匹配不包含特定字符的字符串const regex = /^(?!.*[x|y|z]).*/;console.log(regex.test("abc123")); // trueconsole.log(regex.test("abcx")); // false后顾后顾是指在匹配过程中,我们可以在当前位置向后查看,以确定是否满足某种条件 。通过使用后顾,我们可以对匹配的结果进行更精确的控制,从而实现更复杂的匹配需求 。这个特性已经在ECMAScript 2018(ES9)正式发布了 。
在正则表达式中,有两种常见的后顾:正向后顾和负向后顾 。正向后顾使用肯定的条件来匹配 , 即只有当某个模式的前面紧跟着满足指定条件的内容时,才认为匹配成功 。而负向后顾则使用否定的条件来匹配,即只有当某个模式的前面不满足指定条件的内容时,才认为匹配成功 。
通过使用后顾,我们可以实现一些复杂的匹配需求 。例如,我们可以使用正向后顾来匹配一个特定字符前面跟着满足某种条件的内容,或者使用负向后顾来匹配一个特定字符前面不满足某种条件的内容 。这样,我们就可以更加灵活地处理匹配的结果 。
1. 正向后顾正向后顾语法结构是(?<=pattern),表示匹配位置前面的内容必须满足指定的模式 。
示例一:匹配以数字开头的单词const str = "The price of the product is $50. It is a good deal.";const regex = /(?<=b)d+b/g;const matches = str.match(regex);console.log(matches); // 输出: ["50"]示例二:匹配以特定前缀开头的URLconst str = "Visit our website at https://example.com to learn more.";const regex = /(?<=https://)w+.w+/g;const matches = str.match(regex);console.log(matches); // 匹配了以 `https://` 开头的URL输出: ["example.com"]示例三:匹配某个位置之前的特定字符const str = "I love coding, but I hate debugging.";const regex = /(?<=loves)w+/g;const matches = str.match(regex);console.log(matches); //匹配了位于 `love` 后面的单词输出: ["coding"]2. 负向后顾负向后顾语法结构是(?<!pattern),表示匹配位置前面的内容不能满足指定的模式 。
示例一// 匹配不是以123开头的abcconst regex = /(?<!123)abc/g;;console.log(regex.test("abc123")); // trueconsole.log(regex.test("123abc")); // false常用的正则表达式数字校验相关

  1. 校验整数:/^-?d+$/
  2. 校验正整数:/^d+$/
  3. 校验负整数:/^-d+$/
  4. n位的数字:/^d{n}$/
  5. m-n位的数字:/^d{m,n}$/
  6. 校验浮点数:/^-?d+(.d+)?$/
  7. 校验正浮点数:/^d+(.d+)?$/
  8. 校验负浮点数:/^-d+(.d+)?$/
  9. 校验数字字符串:/^d+$/
  10. 校验百分比(0-100之间的数字):/^([1-9]d?|100)$/
字符校验相关
  1. 校验英文字母:/^[a-zA-Z]+$/
  2. 校验大写英文字母:/^[A-Z]+$/
  3. 校验小写英文字母:/^[a-z]+$/
  4. 校验数字和英文字母组合:/^[a-zA-Z0-9]+$/
  5. 校验数字、英文字母和下划线组合:/^w+$/
  6. 校验中文字符:/^[u4e00-u9fa5]+$/
特殊需求
  1. 匹配手机号码:/^1[3456789]d{9}$/
  2. 匹配邮箱地址:/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/
  3. 匹配URL地址:/^(http|https)://[^s]+$
  4. 匹配身份证号码(18位):/^d{17}[dXx]$/
  5. 匹配日期(YYYY-MM-DD):/^d{4}-d{2}-d{2}$/
  6. 匹配IP地址:/^((25[0-5]|2[0-4]d|1d{2}|[1-9]d|[1-9]).){3}(25[0-5]|2[0-4]d|1d{2}|[1-9]d|[1-9])$/
  7. 匹配邮政编码:/^[1-9]d{5}$/
  8. 匹配整数:/^-?d+$/
  9. 匹配浮点数:/^-?d+(.d+)?$/
  10. 匹配英文单词:/^[a-zA-Z]+$/
  11. 匹配中文字符:/^[u4e00-u9fa5]+$/
  12. 匹配用户名(字母开头,允许字母、数字、下划线,长度为6-16位):/^[a-zA-Z]w{5,15}$/
  13. 匹配密码(包含大小写字母和数字,长度为6-20位):/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)[a-zA-Zd]{6,20}$/


    推荐阅读