宝哥软件园

javascript正则表达式学习中的位置匹配

编辑:宝哥软件园 来源:互联网 时间:2021-08-25

一、前言

正则表达式是匹配的模式,要么匹配字符,要么匹配位置。

事实上,匹配位置在开发中很少使用。本文主要包括:

二、地点是什么

位置:相邻字符之间的位置。

第三,如何匹配位置

在ES5中,有6个锚点:$, b, b,(?=p),(?p)

可视化形式:

RegExp:/^$bB(?=a(?b)/g

3.1和$

(插入符号)匹配开头,并匹配多行匹配中的行首。

$(美元符号)匹配结尾,并在多行匹配中匹配一行的结尾。

例如,我们用#替换字符串的开头和结尾(位置可以用字符替换):

var结果='hello '。replace(/^|$/g,' # ');console.log(结果);//'#hello# '当多条线匹配模式(带修饰符m)时,它们就是线的概念,所以我们需要注意:

var结果='Inlovenjavascript '。replace(/^|$/gm,' # ');console.log(结果);//# I #//# love #//# JavaScript # 3.2 B和 B

b是单词边界,具体是w和W之间的位置,包括w和$之间的位置。

例如,查看文件名“[JS]Level _ 01 . MP4”中的b,如下所示:

var结果='[JS]课目_01.mp4 '。替换(/b/g,' # ');console.log(结果);//'[# JS #]#教训_01#。#mp4# '首先,我们知道w是字符组[0-9a-zA-Z]的缩写,即使它是字母数字或下划线中的任何字符。而W是字符组[0-9a-za-z]的缩写,即W是w以外的任意字符.

让我们看看#是如何产生的:

第一,两边的字符是'['和' j ',这是W和w之间的位置.

第二,两边的字符是' s '和']',即w和 w之间的位置。

第三,两边的字符是空格和‘l’,也就是W和 w之间的位置。

第四,两边的字符是“1”和“.”,即w和 w之间的位置。

第五,两边的字都是“.”和“m”,即W和 w之间的位置

第六个,在结尾,前面的字符' 4 '是w,也就是w和$之间的位置。

知道b的概念后,很容易理解B是词边界,b是非词边界

var结果='[JS]课目_01.mp4 '。替换(/B/g,' # ');console.log(结果);//' #[J # S]# L # e # S # S # o # n # _ # 0 # 1 . m # p # 4 ' 3.3(?=p)和(?p)

(?=p)其中p是子模式,即p前面的位置(该位置后面的字符应与p匹配)

例如:(?=e),表示e字符前面的位置;

var结果='hello '。替换(/(?=l)/g,' # ');console.log(结果);//‘he # l # lo’和(?p)是(?=p的否定意义)

var结果='hello '。替换(/(?l)/g,' # ');console.log(结果);//'#h#ell#o# '是一个正的和一个负的。

汉语翻译分别是肯定先行断言和否定先行断言。

ES5之后的版本将支持positivelookbehind和negativelookbehind。

具体来说(?=p)和(?p ).

四.位置特征

对于位置的理解,我们可以把金额累加成一个空字符' '。

例如,“hello”字符串相当于以下形式:

你好'==' ' ' h ' ' ' ' e ' ' ' ' l ' ' ' ' l ' ' ' ' o也相当于

Hello'=='' '' 'hello '因此,将/^^hello$$$/写成/hello $ $/没有问题:

var结果=/^^hello$$$/.测试(' hello ');console.log(结果);//true,即字符之间的位置可以写成倍数。

注意:通过理解空字符来理解位置是非常有效的方法

五.相关案件

5.1不符合任何事物的规律性

/.^/

规律性只需要一个字符,但是这个字符后面是开头,这样的字符串是不存在的。

5.2千个数字的分隔符表示

比如12345678变成了12345678。

分析:需要将对应的位置替换为','

5.2.1去掉最后一个逗号

常规:/(?=d{3}$)/

var结果='12345678 '。替换(/(?=d{3}$)/g,',')console.log(结果);//12345678其中(?=d{3}$)匹配d{3}之前的位置。和d{3}$匹配目标字符串的最后3位数字。

5.2.2出来的时候有很多逗号。

由于逗号出现的位置,要求有一组3个数字,也就是说,d{3}至少出现一次。

您可以使用量词:

var结果='12345678 '。替换(/(?=(d{3}) $)/g,',')console.log(结果);//12,345,6785.2.3匹配其他案例

写完规律性,就要给个例去验证,你会发现问题:

var结果='123456789 '。替换(/(?=(d{3}) $)/g,',')console.log(结果);//,123,456,789是常规的,这仅仅意味着一旦它是3的倍数,就用逗号替换条形前面的位置。

还要求这个匹配的位置不能是开始。

我们知道一开始的匹配是用0,但是一开始怎么纠正呢?

使用(?)

var regex=/(?^)(?=( d { 3 })$)/g;var结果='12345678 '。replace(regex,',')console.log(结果);//'12,345,678 '结果='123456789 '。替换(正则表达式,',');console.log(结果);//'123,456,789'5.2.4支持其他形式

如果要将“12345678123456789”替换为“12,345,678123,456,789”。

此时,我们需要修改规律性,并将其开头和结尾改为b:

var string='12345678 123456789 ',regex=/(?b)(?=( d { 3 }) b)/g;var result=string.replace(regex,',')console . log(result);//'12,345,678,123,456,789 '其中(?b)如何理解?

要求是当前职位,但不是b前面的职位,实际上(?b)表示 b。

因此正则化最终变成:/B(?=(d{3}) b)/g .

可视化形式:

正则表达式:/B(?=(d{3}) b)/g

货币格式

千分记数法的一个常见应用是货币格式化。

把这个字符串:

格式:

$ 1888.00

实现:

函数格式(num) {return num.toFixed(2)。替换(/B(?=(d{3}) b)/g,',')。replace(/^/,' $ ');};console.log(格式(1888));//'$ 1,888.00'5.3验证密码的问题

密码长度为6-12,由数字、小写字母和大写字母组成,但必须至少包含2个字符。

写多个正则更容易判断,写一个正则更难。

让我们看看我们是否对位置有深刻的理解。

5.3.1简化

目前,条件“必须包含至少2个字符”不在考虑范围内,可以很容易地写成:

var regex=/^[0-9a-za-z]{6,12}$/;5.3.2确定是否包含某个字符。

假设我们必须包含数字,如何纠正它们?此时我们可以使用(?=.*[0-9]).

规律性变成:

var regex=/(?=.*[0-9])^[0-9a-za-z]{6,12}$/;5.3.3同时包含两个特定字符

例如,如果它同时包含数字和小写字母,则可以使用(?=.*[0-9])(?=.*[a-z])。

规律性变成:

var regex=/(?=.*[0-9])(?=.*[a-z])^[0-9a-za-z]{6,12}$/;具体实现

将原问题转化为以下几种情况:

1.它包含数字和小写字母;

2.它包含数字和大写字母;

3.包含小写字母和大写字母;

4.它还包含数字、小写字母和大写字母。

以上4种情况都是或(其实第四条可以省略)。

最终答案:

var regex=/((?=.*[0-9])(?=.*[a-z])|(?=.*[0-9])(?=.*[A-Z])|(?=.*[a-z])(?=.*[az]))^[0-9a-za-z]{6,12}$/;console . log(regex . test(' 1234567 '));//false均为数字console . log(regex . test(' abcdef '));//false均为小写字母console . log(regex . test(' abcdefgh '));//false均为大写字母console . log(regex . test(' AB23c '));//false小于6 console . log(regex . test(' abcdef 234 '));//真大写字母和数字console . log(regex . test(' abcdef 234 '));//真的都有视觉形式:

RegExp:/(?=.*[0-9])(?=.*[a-z])|(?=.*[0-9])(?=.*[A-Z])|(?=.*[a-z])(?=.*[AZ]))^[ 0-9A-Za-z]{6,12}$/

分析:

以上规律性看起来比较复杂,只需要了解第二步,/(?=.*[0-9])^[0-9a-za-z]{6,12}$/;

对于这种规律性,我们需要了解(?=.* [0-9])这个;

分开来说,就是(?=.*[0-9])和。

意思是开头之前有一个位置(当然也是开头,就是同一个位置,想想之前的空符类比)。

(?=.*[0-9])表示该位置后面的字符匹配。*[0-9],即任意数量的字符后跟一个数字。

翻译成白话文,就是下面的字符,其中必须包含数字。

5.3.4另一种解决方案

“包含至少两个字符”的含义是不能全是数字、全是小写字母、全是大写字母。

那么,如果我们问“不是所有的数字”,我们该怎么办?(?p)滚!

相应的规律性:

var regex=/(?^[0-9]{6,12}$)^[0-9a-za-z]{6,12}$/;那三个“不能”呢?

最后的答案是:

var regex=/(?^[0-9]{6,12}$)(?^[a-z]{6,12}$)(?^[a-z]{6,12}$)^[0-9a-za-z]{6,12}$/;console . log(regex . test(' 1234567 '));//false均为数字console . log(regex . test(' abcdef '));//false均为小写字母console . log(regex . test(' abcdefgh '));//false均为大写字母console . log(regex . test(' AB23c '));//false小于6 console . log(regex . test(' abcdef 234 '));//真大写字母和数字console . log(regex . test(' abcdef 234 '));//真的都有视觉形式:

RegExp:/(?^[0-9]{6,12}$)(?^[a-z]{6,12}$)(?^[a-z]{6,12}$)^[0-9a-za-z]{6,12}$/;

摘要

以上是边肖介绍的javascript正则表达式学习的位置匹配。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!如果你觉得这篇文章对你有帮助,请转载,请注明出处,谢谢!

更多资讯
游戏推荐
更多+