JavaScript正则表达式的模式匹配

  • 引言
  • 正文
    • 一、正则表达式定义
    • 二、正则表达式的使用
    • 三、RegExp直接量
      • (1)正则表达式初体验
      • (2)深入了解正则
        • 字符类
        • 重复
        • 选择
        • 分组与引用
        • 指定匹配位置
        • 修饰符
      • (3)用于模式匹配字符串的方法
        • search()
        • replace()
        • match()
        • split()
    • 四、new RegExp()
      • RegExp对象的属性
      • RegExp对象的方法
    • 五、实战应用
      • (1)判断电话号码格式
      • (2)判断邮箱格式
      • (3)判断昵称格式
  • 结束语

引言

其实我写这篇文章的话,主要是想自己重新复习一遍正则表达式。我们也知道正则表达式在很多语言中都是通用的,所以学好这个好处很多。接下来,就跟我一起来学习一下正则表达式,从0到入门吧。

正文

一、正则表达式定义

正则表达式(regular expression)是一个描述字符模式的对象,简单点来讲就是通过正则表达式规定的模式,从一堆字符串中,找到与该模式匹配的字符串,并可以完成检索或字符串替换的功能。

来举个例子,让大家更形象地理解正则表达式的作用。

你去买苹果,老板给你随便拿了几个,但你觉得他给你挑的苹果不好,于是你想从中拿掉一些不好的苹果,再去挑一些好的苹果,在选之前,你先想好自己挑选苹果的标准,比如苹果的纹路要多 、苹果要很红 、苹果不能太大等等,然后再根据你自己定的标准去这么多苹果里挑选到完全符合你标准的苹果放进自己的袋子里,或者是替换掉袋子里你觉得不好的苹果。

希望你们能对正则表达式有个初步的印象。

二、正则表达式的使用

在JavaScript中,正则表达式用RegExp对象表示,我们可以通过两种方式创建一个正则表达式对象:

  1. RegExp直接量
  2. new RegExp()

三、RegExp直接量

let pattern = /javascript/ 这样双正斜杠包裹一个匹配模式的写法就是RegExp直接量,这种方法其实是new RegExp()的一种能语法糖的写法。这一部分我们都用RegExp直接量的方法来讲解,在后面我们会介绍 new RegExp() 的用法

(1)正则表达式初体验

接下来看一个例子,来初次体验一下正则表达式的使用

//RegExp直接量 创建一个字符串的匹配标准
let pattern = /javascript/           
let str = "I love javascript"str.search(pattern)           //返回 7

我来讲一下这段代码,首先我们通过两个正斜杠// 创建了一个正则表达式对象,然后将我们要匹配的字符串放到这两个斜杠中,我们例子中就是将javascript放到两个斜杠中,意思就是我们的匹配标准就是:要匹配到javascript这段字符串。然后我们调用了一个检索的方法search(),这个方法需要传入一个正则表达式对象为参数,根据这个参数去字符串中匹配相应的字符串,如果匹配到了,则返回第一个与之匹配的字符的索引值;若没匹配到,返回-1。例子中,变量str中有一段字符串为javascript,所以匹配成功,并返回javascript的开头字母的索引值,为7

(2)深入了解正则

刚才我们体验了一下最简单的正则表达式去匹配字符串。在上一个例子中,我们将javascript作为标准去匹配,其实大多数的字符都是按照字面含义去匹配的,意思就是你输入什么字符,就去匹配什么字符,比如/python/ 就是去字符串中匹配 python字符串 、/123/ 就是去匹配 123 字符串

但是在正则表达式中,\ 反斜杠有特殊的作用,在一些字符前面加一个反斜杠,能起到转义的作用。例如 /n/ 是匹配字符串 n 的,但是/\n/中,n的前面加了一个反斜杠,就将其转义了,这个匹配模式的意思就是去匹配换行符,下面列出一些其他的转义字符

字符 匹配
字母和数字字符 自身
\o NUL 字符(\u0000)
\t 制表符(\u0009)
\n 换行符(\u000A)
\v 垂直制表符(\u000B)
\f 换页符(\u000C)
\r 回车符(\u000D)

在正则表达式中,许多标点符号都具有特殊的含义,它们是:^ $ . * + ? = ! : | \ / ( ) [ ] { } ,当我们想要匹配这些字符时,也需要在它们前面加上反斜杠 \ ,例如

/*--------------不对小括号进行转义----------------*/
let pattern = /you(kimy)/
let str = "I love you(kimy)"str.search(pattern)       //返回 -1  表示未匹配到相应字符/*--------------对小括号进行转义-----------------*/
let pattern = /you\(kimy\)/
let str = "I love you(kimy)"str.search(pattern)       //返回  7 表示匹配成功

为什么这些标点字符需要进行特殊的转义呢?因为它们有别的用处,我们接下来会慢慢介绍他们的用处

字符类

将直接量字符单独放在方括号里就组成了一个字符类,一个字符类可以匹配它所包含的任意字符。例如/[abcd]/ 就是匹配到 abcd四个字符中的任意一个即为匹配成功。如果在方括号里最前面加上一个 ^ 符号,则表示为,只要匹配到一个不是方括号里的字符的字符串即为匹配成功,例如 /[^abc]/就是匹配到不是 abc 三个字符中的任意一个即为匹配成功。 字符类还可以使用 - 来表示字符的一个范围,例如 /[a-zA-Z0-9]/表示匹配到任意一个大小写字母或者数字都为匹配成功。

在正则表达式中,还给出了一些特殊字符的转义,我们来看下列的表格

字符 匹配
[…] 方括号内的任意一个字符
[^…] 不在方括号内的任意一个字符
. 除了换行符和其他Unicode行终止符之外的任意字符
\w 相当于[a-zA-Z0-9]
\W 相当于[^a-zA-Z0-9]
\s 任何Unicode空白符
\S 任何非Unicode空白符
\d 任何数字,相当于[0-9]
\D 任何非数字,相当于[^0-9]
[\b] 退格直接量

我们来选取表格中的 \d 来举个例子

let pattern = /python\d/
let str = "I love python3"str.search(pattern)   //返回  7

我们设置的匹配模式是 /python\d/,表示匹配到一个字符串为python并且后面紧跟一个任意数字即可,所以成功匹配到 str 中的python3字符串

重复

在上一部分,我们知道字符类都是匹配一个字符,例如 /\d//[0-9]/都是匹配任意一个数字 、/[abcd]/也是匹配一个字符,那如果我们想要匹配多个字符串岂不是要写很多遍重复代码?例如我们要匹配一个三位数字的字符串,我们就需要设置这样一个匹配模式 /\d\d\d/。 其实正则表达式有几种语法,可以将该表达方式简化,我们来看一下这个表格

字符 匹配
{n,m} 匹配前一项n-m次
{n,} 匹配前一项至少n次
{n} 匹配前一项n次
? 匹配前一项0次或1次,相当于{0,1}
+ 匹配前一项至少一次,相当于{1,}
* 匹配前一项0次或更多次,相当于{0,}

我们接下来就利用这些语法进行一下重复操作,例如我们要匹配一段字符串中的11位数字,我们可以这样写 /\d{11}/,因为\d表示的是任意数字,在它后面加上一个重复语法,就是重复\d多少次。我们如果要匹配一个三位的字母并且后面跟上一个一位的可选数字,我们可以这样 /[a-zA-Z]{3}\d?/[a-zA-Z]{3} 表示匹配任意三位字母,\d? 表示匹配数字0次或1次

重复是贪婪的,它们会尽可能的多地匹配,我们称之为贪婪的重复,下面来看一个例子

let pattern = /\d{3,10}/
let str = "0123456789"str.match(pattern)[0]     //返回  0123456789

这里介绍一个新的匹配方法 match ,它可以将匹配到的一段字符串放在一个数组里,若没匹配到则返回null。 在这个例子中,我们设置的匹配模式是/\d{3,10}/,表示匹配数字3到10次,因为重复语法默认是贪婪的,它会尽可能多地匹配,所以他就匹配了任意数字10次,返回 0123456789

那么如果我们如何使他们不贪婪地重复呢?其实很简单,我们只需要在重复的语法后面加一个 ? 即可将重复变成非贪婪的,还是这个例子

let pattern = /\d{3,10}?/
let str = "0123456789"str.match(pattern)[0]     //返回  012

这是我们可以看到,在重复语法 {3,10}后面加上一个 ? 以后,它并没有尽可能多地匹配了,而是变成了尽可能少地匹配,即匹配三次任意数字就结束匹配。

还有其他的非贪婪重复的语法有: ??+?*? ,你们可以下去自行测试

选择

在JavaScript中有一个运算符可以用在正则表达式中,那就是 | ,它的意思就是或者,例如这个例子 /[a-z]|[0-9]/ 意思就是可以匹配任意一个a-z的字母,或者也可以匹配任意一个0-9的数字。

在复杂的例子里,我们也可以这样使用,先给出需求,匹配一段字符串,它可以是3位的不区分大小写的字母,也可以是4位的数字

let pattern = /[a-zA-Z]{3}|\d{4}/
let str = "Lpyexplore2333"str.match(pattern)[0]   //返回   Lpy

在这个例子中,我们匹配的模式是3位的不区分大小写的字母或者4位数字,但是 str 中既有3位的不区分大小写的字母,也有4位数字,为什么最后只是返回了Lpy呢? 因为正则的匹配是从字符串的最左边开始匹配,只要有一个符合匹配模式的就停止匹配。

分组与引用

上面我们说过,在正则表达式中小括号是有特殊含义的,如果真的想要匹配带有小括号的字符串,必须要用反斜杠转移,接下来我们就来介绍一下 () 小括号的几种作用。

  1. 作用一: 把匹配模式中的部分项组合成子表达式

类似于这样 /java(script)?/,这种匹配模式的意思就是,匹配一段为 java 或者 javascript 的字符串。我们可以试一下,如果去掉这个括号会是什么结果,即 /javascript?/,这种匹配模式的意思就是,匹配一段为 javascrip 或者 javascript 的字符串。

所以我们可以很清楚的知道,() 小括号可以帮我们组合一个子表达式,然后将这个子表达式作为整体,配合 |*?+ 等符号去处理。

  1. 作用二:定义一个子匹配模式,方便获取子匹配模式匹配到的字符串

在将这个作用前,我还是再来详细介绍一下我之前例子中用到的匹配方法 match() 的具体用法。

match() 方法需要传入一个正则表达式,然后根据这个参数去匹配字符串,最后返回一个数组,数组的第一个元素是该参数匹配到的字符串,数组的第二个元素是该正则表达式中第一个()小括号内匹配到的字符串,数组的第三个元素是该正则表达式中第二个()小括号内匹配到的字符串,这样以此类推。若没匹配到就返回null

介绍完 match() 方法的使用以后,我们来看一个例子

/*---------------------在匹配模式中加小括号--------------*/let pattern = /java(script\d+)/
let str = "javascript2333"str.match(pattern)   //返回  ['javascript2333', 'script2333']/*---------------------不在匹配模式中加小括号--------------*/let pattern = /javascript\d+/
let str = "javascript2333"str.match(pattern)   //返回  ['javascript2333']

我们可以看到,在匹配模式中加了小括号,最后返回的数组中会额外返回一个元素,用于存放小括号定义的子匹配模式匹配到的字符串。

接下来举一个实战中的例子

有这样一个 url 地址 https://www.baidu.com/s?query=javascript,我们知道 ? 后面跟的是请求参数,如果我们想要获取请求参数 query 的值,也就是 query= 后面的字符串,我们该如何使用正则表达式去匹配呢?

let pattern = /query=([a-zA-Z]+)/
let str = "https://www.baidu.com/s?query=javascript"str.match(pattern)  //返回 ['query=javascript', 'javascript']

在这个例子中,我们很明确的知道我们只是想获取 query= 后面的字符串,但是如果我们直接用这个模式 /query=[a-zA-Z]+/ 去匹配的话,我们最后只能获得 query=javascript 这样一整段字符串。所以我们可以在我们可以使用小括号来定义一个子匹配模式,这样在返回的数组中直接获取小括号匹配返回的值就可以了。

  1. 作用三:小括号定义的子匹配模式可以被反斜杠+数字再次引用

其实作用三是在作用二的基础上的,我们可以通过一个反斜杠 \ 加上数字 n来引用该匹配模式中第n个括号定义的子匹配模式,例如 /java(script)\1/,这个意思就是 \1的部分需要匹配的字符串要跟(script) 一样

let pattern = /java(\d+)\1/
let str = "java123123"str.match(pattern)    //返回  ['java123123', '123']

在这个例子中,\1(\d+)进行了一次引用,注意是引用,而不是这样 /java(\d+)(\d+)/。我们来看一下这两者的区别

/*----------------使用反斜杠加数字引用----------------*/let pattern = /java(\d+)\1/
let str = "java123321"str.match(pattern)  //返回  null/*----------------完全的重复一遍子匹配模式----------------*/let pattern = /java(\d+)(\d+)/
let str = "java123321"str.match(pattern)  //返回  ['java123321', '12332', '1']

通过这两个例子的对比,我们可以发现以下几点区别:

  1. 子匹配模式必须和反斜杠+数字 匹配到的字符串一模一样,否则匹配失败
  2. 两个相同的子匹配模式则不需要两者匹配到一模一样的字符串
  3. 反斜杠+数字 虽然是对定义的子匹配模式的引用,但在匹配返回的结果里,却不会返回 反斜杠+数字 匹配到的内容

补充:如果我们用小括号定义的子匹配模式不想被反斜杠+数字引用,我们可以在小括号内部的最前面加上 ?:,即这种形式 (?:\d+) ,这样的话我们就无法在后面使用 反斜杠+数字 来引用这个子匹配模式了。

例如:

let pattern = /java(?:script)(\d+)\1/
let str = "javascript1212"str.match(pattern)      //返回 ['javascript1212', '12']

例子中我们可以看到, \1 是对第二个子匹配模式(\d+)进行了引用,其实我们可以这样理解,使用这种形式(?:...)定义的子匹配模式,不会被计入编号中,所以也不会被 反斜杠+数字 引用。

指定匹配位置

在正则表达式中,我可以利用某些字符,去指定匹配发生的位置。这些字符我们称之为正则表达式的

字符 含义
^ 匹配字符串的开头
$ 匹配字符串的结尾
\b 匹配一个单词的边界
\B 匹配非单词边界的位置
(?=p) 零宽正向先行断言,?=后面的字符都要与p匹配,但不能包括p的那些字符
(?!p) 零宽负向先行断言,?!后面的字符不与p匹配

我们来逐个说一下这几个字符的用法:

  • ^ 符号

^ 这个符号是将匹配位置定位到字符串的开头,直接来看一个例子

/*--------------------------第一种情况--------------------*/let pattern = /^javascript/
let str = "javascript is fun"str.match(pattern)         //返回 ['javascript']/*--------------------------第二种情况--------------------*/let pattern = /^javascript/
let str = "i love javascript"str.match(pattern)         //返回 null

我们匹配的模式是,要以javascript开头的字符串。第一种情况,字符串以 javascript开头,所以能匹配到;第二种情况,javascript不是在开头的位置,而是在末尾的位置,不符合匹配模式,所以匹配失败返回null。

在前面我们有一个地方还用到了 ^ 这个符号,那就是 [^abc] ,所以一定要注意,当 ^ 放在方括号里,表示的是取反,也就是说不匹配方括号里的任何字符。

  • $ 符号

$ 这个符号是将匹配位置定位到字符串的末尾,直接来看一个例子

/*--------------------------第一种情况--------------------*/let pattern = /javascript$/
let str = "javascript is fun"str.match(pattern)         //返回 null/*--------------------------第二种情况--------------------*/let pattern = /javascript$/
let str = "i love javascript"str.match(pattern)         //返回 ['javascript']

我们的匹配模式是,字符串要以javascript结尾。第一种情况,字符串结尾处字符是 fun ,不符合匹配模式,返回null;第二种情况,结尾处字符为javascript,符合匹配模式,所以匹配成功。

我们可以看一下如果 ^ 符号 和 $ 符号一起使用是什么情况:

let pattern = /^javascript$/
let str = "javascript"str.match(pattern)      //返回  ["javascript"]

当这两个符号一起使用时,匹配模式就变成了匹配整段字符串,并且字符串的内容就是 ^ 与 $ 之间的内容

  • \b

这个符号的作用是匹配一个单词的边界,我们来看几个例子来理解一下

/*-------------------------第一种情况----------------------*/let pattern = /\bjava/
let str = "I love javascript"str.match(pattern)         //  返回 ['java'] 匹配成功/*-------------------------第二种情况----------------------*/let pattern = /\bjava/
let str = "javascript is fun"str.match(pattern)         //  返回 ['java']   匹配成功/*-------------------------第三种情况----------------------*/let pattern = /\bjava/
let str = "1javascript is fun"str.match(pattern)         //  返回 null   匹配失败/*-------------------------第四种情况----------------------*/let pattern = /java\b/
let str = "I am learning java"str.match(pattern)         //  返回 ['java']   匹配成功/*-------------------------第五种情况----------------------*/let pattern = /java\b/
let str = "I am learning javascript"str.match(pattern)         //  返回 null   匹配失败/*-------------------------第六种情况----------------------*/let pattern = /\bjava\b/
let str = "I think java is fun"str.match(pattern)         //  返回 ['java']   匹配成功

看了上面几个例子,你有没有得出什么规律?

其实 \b 的作用就是将匹配的点放到一个字符串前面(\b放前面)或后面(\b放后面)的 [^a-zA-Z0-9] 处,也可以理解为 \b 可以替换那些特殊字符,但 \b 不会作为匹配的内容。

  • \B

\B 则与 \b 相反了, \b 可以替换那些特殊字符,那么\B就是用来替换那些非特殊字符,也就是 [a-zA-Z0-9] 内的字符。

也来举几个简单的例子吧

/*-------------------------第一种情况----------------------*/let pattern = /java\B/
let str = "I love javascript"str.match(pattern)         //  返回 ['java'] 匹配成功/*-------------------------第二种情况----------------------*/let pattern = /java\B/
let str = "I love java"str.match(pattern)         //  返回 null 匹配失败/*-------------------------第三种情况----------------------*/let pattern = /\Bjava\B/
let str = "I love 1javascript"str.match(pattern)         //  返回 ['java'] 匹配成功/*-------------------------第四种情况----------------------*/let pattern = /\Bjava\B/
let str = "I love javascript"str.match(pattern)         //  返回 null 匹配失败
  • (?=p)

(?=p)表示接下来的字符要与p匹配,但p不会作为内容返回

先来看一个例子

let pattern = /java(script)?(?=\:)/
let str = "java: my favorite language"str.match(pattern)       //返回 ["java", undefined]  匹配成功

该例子的匹配模式:匹配一段字符串为java 然后 script 可以有一个也可以没有,后面必须跟一个 :,才能匹配成功,返回匹配内容,但是匹配内容中不包含 :

再来看一个类似的例子

let pattern = /java(script)?(?=\:)/
let str = "javascript is my favorite language"str.match(pattern)       //返回 null  匹配失败

该例子匹配失败是因为字符串中的javascript后面没有 :,没有满足 (?=\:)的匹配要求

  • (?!p)

(?!p)与(?=p)相反,它表示接下来的字符不与p匹配

我们也来看一个例子

let pattern = /java(?!script)/
let str = "javascript is my favorite language"str.match(pattern)       //返回 null  匹配失败

该例子的匹配模式是:匹配一段字符,只要java后面紧跟这的字符不是script即为匹配成功,同时java后面跟的内容也不会作为内容返回。但这个例子中的 str 里, java后面紧跟着的就是script,所以匹配失败。那么成功的例子就是这样的

let pattern = /java(?!script)/
let str = "javascr1111 is my favorite language"str.match(pattern)       //返回 ["java"]  匹配成功

在该例子中, java 后面跟着的就不是script了,所以匹配成功了。java后面的字符不作为内容返回,所以最后的匹配结果就是 java

修饰符

正则表达式的修饰符是用以说明高级匹配模式的规则,并且修饰符是放在// 双斜杠外面的,例如这样 /java/g,g就是修饰符

接下来给出一张表,列出了修饰符的种类和含义

字符 含义
i 执行不区分大小写的匹配
g 执行全局匹配,即找到所有匹配的项并返回,而不是找到第一个之后就停止
m 多行匹配模式

我们来逐个讲解它们各自的用途:

  • 字符 i

我们之前会用这样的匹配模式去匹配 /[Jj]ava[Ss]cript/,这是因为我们不知道字符串中写的是 javascript 还是 JavaScript。其实我们可以直接用一个修饰符 i 来避免大小写的干扰,就想这样 /javascript/i

let pattern = /javascript/i
let str = "JavaScript"str.match(pattern)        // 返回 ['JavaScript']  匹配成功

我们可以看到,匹配时忽略了大小写的影响,仍然匹配成功了

  • 字符 g

我们之前匹配字符串时,都是匹配到第一个就结束匹配返回内容,例如

let pattern = /java/
let str = "I love javascript and java"str.match(pattern)      //返回 ["java"]  匹配到javascript的java就返回了

我们可以看到 str 字符串中,有两个java,但只匹配到javascript就返回了,如果我们要匹配到字符串中所有符合匹配模式的字符串,我们就可以用修饰符g,就像这样 /java/g

let pattern = /java/g
let str = "I love javascript and java"str.match(pattern)    //返回 ["java", "java"] 匹配到了所有的java
  • 字符 m

如果一个字符串中包含换行符,则该字符串就有多行。这时我们可以使用修饰符 m 进行多行模式的匹配。

let pattern = /java$/m
let str = "java\nis fun"str.match(pattern)            //返回 ['java'] 匹配成功

在这个例子中,str内有一个换行符,这样的话,第一行就是 java ,第二行就是 is fun 。我们的匹配模式是查找每一行,只要这一行的结尾是java,就返回匹配到的内容。

其实在这个例子中,我们看到,使用了修饰符 m 以后,锚字符 ^ 和 $ 不再是以一整个字符串的开头或结尾为匹配点了,而是以每一行的开头或结尾为匹配点。

(3)用于模式匹配字符串的方法

我们在前面的很多例子中用到了search()方法 、match()方法,他们都是匹配字符串的方法,其实还有很多种匹配的方法,他们的用法和作用各不相同,我们来了解一下

用于模式匹配字符串的方法有以下几种:

  1. search( )
  2. replace( )
  3. match( )
  4. split()

接下来我们来详细讲解一下

search()

该方法需要传入一个正则表达式作为参数,并返回第一个与之匹配的字符串的起始位置,若没匹配到,则返回-1


"javascript".search(/script/)      //返回 4"javascript".search(/sccc/)        //返回-1

replace()

该方法是用于字符串的检索与替换。需要传入两个参数,第一个参数为正则表达式;第二个参数为需要进行替换的字符串。匹配成功则会用第二个参数去替换匹配到的字符串,并返回替换后的整体字符串;若没匹配成功,则返回原来的整体字符串。


"javascript".replace(/java/, 'python')  //返回 pythonscript"javascript".replace(/abc/, 'python')   //返回 javascript

若使用了修饰符g,则会将所有匹配到的字符串都进行一个替换。


"javascript and java".replace(/java/, 'python')  //返回 pythonscript and java"javascript".replace(/java/g, 'python')   //返回 pythonscript and python

match()

该方法需要传入一个正则表达式作为参数,返回一个由匹配结果组成的数组,如果正则表达式使用了修饰符g,则将所有匹配到的结果都放到数组中并返回。


"javascript and java".match(/java/)   //返回 ['java']"javascript and java".match(/java/g)   //返回 ['java', 'java']

补充:当match()传入一个非全局的正则表达式时,实际上返回的数组里有两个属性:index和input,他们分别表示匹配到的字符串的起始位置和检索的整个字符串。

let ret = "I love javascript and java".match(/java/)
ret.index        //返回  7
ret.input        //返回 I love javascript and java

split()

该方法是用于将字符串分割,并将分割开的部分作为数组中的元素,最终返回一个数组。该方法需要传入一个正则表达式作为参数,去确定需要根据什么去分割这串字符串,若匹配成功,最终返回一个数组,数组中的元素就是每个被分割的字符串;若匹配失败,也会返回一个数组,数组中只有一个元素,那就是这个字符串整体。


'1,2,3,4,5,6'.split(/,/)   //返回 ['1', '2', '3', '4', '5', '6']'1,2,3,4,5,6'.split(/\+/)  //返回 ['1,2,3,4,5,6']

四、new RegExp()

在第三部分讲解正则表达式时,我们都是用的直接量的形式创建的RegExp对象,其实使用直接量,在内部还是会调用RegExp()构造函数去创建对象实例的,那我们就来看看直接通过RexExp()构造函数是如何创建对象的吧。

RegExp()构造函数一共有两个参数,第一个参数为正则表达式的主体部分;第二个参数是可选的,为修饰符。需要注意的是,我们在写主体部分的时候,有些地方要用一个反斜杠\进行转义,我们必须将一个反斜杠\ 替换成两个反斜杠 \\。接下来我们来看一下一个简单的例子:

//创建一个RegExp对象,全局匹配字符串中连着的三个数字
let pattern = new RegExp("\\d{3}", "g")

这种创建RegExp对象的方法有一个好处,就是可以动态的改变正则表达式的主体部分;而RegExp直接量就无法做到动态变化。

RegExp对象的属性

我们创建的每个RegExp对象(包括RegExp直接量)都包含有5个属性:

  1. source:这是一个只读属性,包含正则表达式的文本,例如 /java/的source表示的就是 java
  2. global:这是一个只读的布尔值,用以表示这个正则表达式是否使用了修饰符 g
  3. ignoreCase:这是一个只读的布尔值,用以表示这个正则表达式是否使用了修饰符 i
  4. multiline:这是一个只读的布尔值,用以表示这个正则表达式是否使用了修饰符 m
  5. lastIndex:这是一个可读写的整数值,如果匹配模式中有修饰符 g,则这个属性会存储下一次检索的开始位置,这个属性只有在调用exec()和test()两个方法的时候会用到。

RegExp对象的方法

RegExp对象定义了两个用于匹配的方法——exec()test(),这两个方法与我们之前讲到的用于模式匹配字符串的方法不同的是,前者是定义在RegExp对象上的方法,并且传入的参数是字符串;而后者是调用字符串的方法,传入的参数是RegExp对象。

  • exec()

该方法就跟前面说到的不传入修饰符g的matach()方法一样,它对字符串执行一个正则表达式,如果匹配失败,返回null;如果匹配成功,则返回一个数组,数组的第一个元素是正则表达式匹配到的字符串,剩下的元素则是子表达式匹配到的字符串,同时该数组也包含indexinput两个属性。

来看一个例子,体会一下exec()方法的作用

let pattern = new RegExp("java", "g")
let ret = pattern.exec("I love javascript and java")  //返回["java"]ret.index     //返回 7
ret.input     //返回 I love javascript and java

exec()match() 方法不同的是,不管正则表达式是否使用修饰符g,exec()都只会将第一个匹配到的字符串以及子表达式匹配到的字符串放到数组里返回;而match()方法在没有使用修饰符g时,跟exec()一样,如果使用了修饰符g,则将所有匹配到的字符串都放在数组里一起返回,并且不会返回圆括号里匹配到的字符串,同时,该数组里不包含indexinput两个属性。

那么这里引发一个疑问,既然不管是否使用修饰符g,exec()方法都只会返回第一个匹配到的字符串,那这个修饰符g有什么用呢? 其实我们在前面有说到,RegExp对象内有一个属性叫做 lastIndex,该属性默认为0。当我们调用exec()方法,并且使用了修饰符g进行匹配时,若匹配成功,lastIndex将变为下一次检索开始位置的索引值;若匹配失败,lastIndex则重置为0

let pattern = new RegExp("java", "g")
console.log(pattern.lastIndex)        //查看lastIndex默认为0
let str = "I love javascript and java"pattern.exec(str)               //进行第一次检索匹配,返回["java"]
console.log(pattern.lastIndex)  //此时lastIndex为 4pattern.exec(str)               //进行第二次检索匹配,返回["java"]
console.log(pattern.lastIndex)  //此时lastIndex为 19pattern.exec(str)               //进行第三次检索匹配,返回null
console.log(pattern.lastIndex)  //此时lastIndex为  0

从上面这个例子我们能看看到,lastIndex默认为0,表示从字符串的开头开始检索,当我们进行第一次检索时,匹配到了javascript中的java,返回了该字符串,这时lastIndex变为第一次匹配到的字符串的起始位置索引 4;我们进行第二次索引,是从索引 5 开始匹配的,往后检索到字符串末尾的java,并返回该字符串,同时lastIndex变为第二次匹配到的字符串起始位置索引 19;我们进行第三次索引,是从索引 20 开始匹配的,往后匹配,已经无法匹配到对应的字符串了,所以返回一个null,并将lastIndex重置为0,表示下一次检索又从字符串的开头开始检索。

  • test()

该方法与exec()类似,该方法也是传入一个字符串作为参数,对该字符串进行检索,如果匹配到了相应的字符串,则返回true;如果没匹配到,则返回false。

let pattern = new RegExp("java", "g")
let ret = pattern.test("I love javascript and java")  //返回 true

test() 与 exec() 相同的是,如果匹配时使用了修饰符g,test()也会根据对象内部属性 lastIndex 进行检索匹配,这里就不多做说明了。

五、实战应用

(1)判断电话号码格式

应用场景:判断用户输入的电话号码格式是否正确
电话号码格式:1开头,后面跟10位数字

let str = "12356456132"  //str为用户输入的电话号码
let re = /^1\d{10}$/     
if(re.test(str) !== true) {console.log('电话号码格式不正确')
}
else {console.log('电话号码格式正确')
}

(2)判断邮箱格式

应用场景:判断用户输入的邮箱格式是否正确
邮箱格式:第一部分@第二部分,第一部分由字母、数字 和 短横线 - 组成,第二部分由(字母、数字、短横线 - ).cn.com…… 组成

let str = "561325647@qq.com"    //用户输入的邮箱
let re = /^[\w-\.]+@(\w-?)+(\.\w{2,})+$/
if(re.test(str) !== true) {console.log('邮箱格式不正确')
}
else {console.log('邮箱格式正确')
}

(3)判断昵称格式

应用场景:判断用户输入的昵称是否符合规定格式
昵称格式:昵称由字母、数字、下划线组成,必须由字母开头,长度为4-16位

let str = "Lpyexplore233"     //用户输入的昵称
let re = /^[a-zA-Z][\w_]{3,15}$/
if(re.test(str) !== true) {console.log('昵称格式不正确')
}
else {console.log('昵称格式正确')
}

结束语

花了两天的事件,自己重新完完整整地复习了一边正则表达式,并且将知识点以博客的形式展现了出来,希望这篇文章能对大家有所帮助吧。喜欢的关注我,以后还会根据JavaScript不同部分的知识点进行整理并发表博客~

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Solidworks或CAD怎样输出高质量图片?

    Solidworks调整好模型视图,导出为工程图,在工程图中直接进行剖面图案填充(因为solidworks工程图导入CAD时,由于二维图线条不闭合很容易造成添加剖面图案填充失败)。在CAD中对二维图进行稍微修改,然后开始转化为PDF。其步骤如下:CAD中→打印→设置(打印机名称:DWG to PD…...

    2024/3/14 3:33:04
  2. hdfs中块池与命名空间相关类的对应关系

    每个BlockPoolSlice有一个bpid(String),每个BPOfferService有一个bpNSInfo,它是NamespaceInfo类型 该类型中也有一个bpid(String)字段,所以一个BPOfferService对应一个BlockPoolSlicedatanode如何与namenode进行通信,在datanode端一个BPServiceActor对应一个namenode,它 持有…...

    2024/3/14 9:43:11
  3. Python数据分析软件包介绍

    Python数据分析主要软件包: 1、python -m pip install numpy 2、python -m pip install pandas 3、python -m pip install matplotlib 4、python -m pip install scipy 5、python -m pip install wordcloud 6、python -m pip install scikit-learn 软件包功能介绍: 1、Numpy …...

    2024/3/14 9:43:11
  4. 什么是call和apply

    什么是call和apply call 和 apply 的定义都是使用改变函数调用的this对象 和普通函数传参一下,只不过是新增了一个this对象参数在第一位,传入的this对象可以改变函数实例本身的this对象,以至于函数使用的多样性 bind 功能类似,只不过是在调用的时候返回的是一个函数对象,该对象…...

    2024/3/14 9:43:15
  5. C++基础二

    今天编写了一些C++的小程序,斐波那契数列,记得学C语言的时候,用的是一个递归的写法,没有考虑程序的边界,也没有考虑过bool变量在这个程序中的用法。/* * Fibonacci 数列的第一元素和第二元素 * 都是1,接下来每个元素都是前两个元素的和 * * elem:含有即将返回的值, *…...

    2024/3/14 3:33:00
  6. 差点被一个截图忽悠了,分析一个QQ空间钓鱼网站

    刚刚打开手机tim看到QQ空间有留言下面一个截图的东西(别扫进去输自己的账号密码哈,看看就得了,典型的钓鱼网站)貌似在前几年就有此类网站,不过现在高级了些,下面就由图图来分析一下原理是什么鬼(毫无技术含量)大神快点绕道!!!首先看到这个图片而写是熟人给你留言的,并且…...

    2024/3/26 8:56:20
  7. MDK上使用 ULINK2设备上的SW调试 实现STM32 的 trace功能 (二)

    MDK上使用 ULINK2设备上的SW调试 实现STM32 的 trace功能 (二) 配置Trace功能Trace功能包括:Core Clock、Trace Port 以及定义Trace Events等。它们的设置对Trace HW的正确执行非常重要。连接上Target Debugger以后,选择Options for Target -> Debug -> Settings –&…...

    2024/3/14 3:32:56
  8. JVM系列之类加载器

    前言上节我们介绍了类加载的时机和过程,对类加载有了个初步的认识,上节我们有不断提到一个东西:类加载器,那么什么是类加载器?又有哪些类加载器?类加载器之间的联系等等一些问题,今天我们将会围绕这些点展开,那么,开始我们今天的JVM之旅吧。什么是类加载器?把类加载阶…...

    2024/3/14 9:43:19
  9. c++ packaged_task

    原文链接:packaged_task介绍与实例std::packaged_task<>是一个类模板,代表一个异步任务。封装了1、可调用实体,即函数,lambda函数或函数对象2、一个共享状态,通过关联的回调来存储返回的值或抛出的异常。假设我们有一个现有的函数从数据库中提取数据并返回,std::st…...

    2024/3/14 9:43:14
  10. ROS功能包之gmapping(SLAM)

    gmapping功能包集成了Rao-Blackwellized粒子滤波算法,为开发者隐去了复杂的内部实现gmapping功能包订阅机器人的深度信息、IMU信息和里程计信息,同时完成一些必要参数的配置,即可创建完成基于概率的二维栅格地图(机器人地图一般分为三种类型:栅格地图,拓扑地图,特征地图…...

    2024/3/27 1:07:25
  11. kali版本合集

    kali新版旧版镜像下载...

    2024/3/14 3:32:50
  12. springBoot+thympleaf

    1、pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>2、配置文件 #spring.thymeleaf.cache = true #启用模板缓存。 #spring.thymeleaf.check-t…...

    2024/3/14 9:43:15
  13. 手把手教学postman设置环境变量

    前提是:postman已安装并添加了新项目(详情请看前一期) 首先我们设置环境变量: 1.点击右上角眼镜旁边的齿轮 弹出以下界面: 2.点击右下角Add 弹出以下界面 3.在这里面添加ip和prot 在这个地方输入名字: 点击右下角add 4.环境变量就设置完成了 5.当我们使用他的时候我们需要…...

    2024/3/14 1:01:01
  14. MySQL8.0.19 MGR MySQL router MySQL connector failover 组合实现高可用

    首先在虚拟机中搭建3台Linux(Redhat8.0)服务器,分别命名为server01,server02,server03在每台虚拟机中安装好MySQL8.0.19,server_id分别设置为1,2,3,每台数据库创建复制账户,并且安装好组复制插件set sql_log_bin=0; create user repl@% identified with mysql_native_p…...

    2024/3/14 1:00:59
  15. 2020年,你应该学会的Postman用法

    随着公司微服务体系服务越来越多,业务增长越来越迅速,版本迭代越来越快,而且对系统的可用性要求越来越高,传统的手工发布系统的方式已经完全无法满足日常运维的需求了,自动化构建发布的需求越来越强烈,但是自动化发布有个基础的环境,自动化测试,鉴于团队规模不大,测试…...

    2024/3/14 1:00:59
  16. 三种键盘事件的区别

    onkeyup: 这个事件在用户按下并放开任何字母数字键时发生。系统按钮(例如,箭头键和功能键)无法得到识别。 onkeydown: 这个事件在用户放开任何先前按下的键盘键时发生。 onkeypress : 这个事件在用户按下任何键盘键(包括系统按钮,如箭头键和功能键)时发生。 三者之间的…...

    2024/3/14 1:00:58
  17. C语言实现 蓝桥杯 算法训练 生活大爆炸版石头剪刀布

    试题 算法训练 生活大爆炸版石头剪刀布蓝桥杯试题解答汇总链接 资源限制时间限制:1.0s 内存限制:128.0MB 问题描述石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版…...

    2024/3/14 3:31:41
  18. 信号与系统笔记

    –>信号与系统学习笔记...

    2024/3/14 9:43:00
  19. 面试volatile关键字时,我们应该具备哪些谈资?

    写在前面 在 可见性有序性,Happens-before来搞定 文章中,happens-before 的原则之一: volatile变量规则对一个 volatile 域的写, happens-before 于任意后续对这个 volatile 域的读按理说了解了这个规则,对 volatile 的使用就已经足够了,但是面试官可是喜欢刨根问到底的,为…...

    2024/3/14 9:43:08
  20. linux /bin/bash^M: bad interpreter的解决办法

    linux下执行shell脚本时报错:-bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory。 原因是windows下的文件是dos格式,即每一行结尾以\r\n来标识,而linux下的文件是unix格式,行尾则以\n来标识。 查看文件格式有三种方法: 1.cat -A ,如果输出结果中行…...

    2024/3/14 9:43:03

最新文章

  1. ctf-36C3解析

    一、环境 unbentu 这道题给了docker环境&#xff0c;gethub上面自己找 一个好用的linux全局切换梯子proxychains 二、开始解析 2.1初始 2.2编译 docker build . 2.3代理设置完毕 我试了一下代理还是不行&#xff0c;我们换源尝试一下 RUN sed -i s/deb.debian.org/mirro…...

    2024/3/29 17:01:42
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Apache Spark

    一、Apache Spark 1、Spark简介 Apache Spark是用于大规模数据 (large-scala data) 处理的统一 (unified) 分析引擎。 Spark官网 Spark最早源于一篇论文Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing,该论文是由加州大学柏…...

    2024/3/29 14:00:55
  4. 启动性能优化

    一、应用启动慢的原因 1.在主线程执行了太多耗时的操作&#xff0c;比如加载数据&#xff0c;或者初始化三方库等等&#xff0c;导致在Application的oncreate或者Activity的oncreate方法中耗时太久 2.布局嵌套太深&#xff0c;或者一些不会立即使用的布局也在一开始一起加载到…...

    2024/3/28 22:30:04
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/3/27 10:21:24
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/3/24 20:11:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/3/29 2:45:46
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/3/29 16:26:39
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/3/29 5:19:52
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/3/28 17:01:12
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/3/29 11:11:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/3/29 1:13:26
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/3/29 8:28:16
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/3/29 7:41:19
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/3/24 20:11:18
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/3/29 9:57:23
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/3/29 0:49:46
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/3/24 20:11:15
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/3/27 7:12:50
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/3/24 20:11:13
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/3/26 11:21:23
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/3/28 18:26:34
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/3/28 12:42:28
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/3/28 20:09:10
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57