我们已经会熟练使用js字符串类型了,例如你想知道一个变量是否等于一个字符串,可能可能这样判断

if(a=='hello,world'){...
}
复制代码

但是往往我们有时候对一些字符串判断显得力不从心,例如判断一个文件的类型是否为js类型,可能有下面几种文件名格式

1, hello.js
2, js.hello
3, hellojs
4, helljso
复制代码

以我们人脑的认知来看,我们一眼能够看出只有第一个符合我们的要求,但是我们怎么写这个判断程序呢?例如我们可以这样判断,例如js字符串方法,从右边往左边取三位,如果为‘.js’则匹配成功。 但是我问一下如果文件名描述为hello..js呢?显然,这种方法不太适合,所以需要正则表达式来进行精确匹配了。 正则表达式用于描述一种特征,就例如你描述某某女生长得怎么样一样。例如瓜子脸,一米六到一米七,长头发... 同理我们可以使用正则表达式来描述我们需要的字符,例如邮箱格式:

一串数字或者字母+@+字符串或者数字+'.'+'数字或者字符串'
复制代码

我们怎么用代码来描述我们的这个对象呢,我们可以使用例如下面的写法

var a=/hello/i
或者
var a = new RegExp('hello',i);
复制代码

/ / 之间写入你的匹配规则 后面加一个修饰符i 或者g或者m

i表示忽略大小写,即人为HELLO和hello是一样的
g表示全局,多用在匹配和搜索中,我们先暂且不管。
m表示多行匹配
复制代码

我们首先学会怎么描述规则,即怎么写/ /之间的规则 对于某种特征一般有一下几种关系。

  1. 精确的。例如字符为'hello'的,只需/hello/即可,如果你接收HELLO,即/hello/i即可
  2. 含有,例如0-9之间
  3. 范围加限定长度,例如我需要匹配长度为4的0-9之间数字
  4. 边界的,例如 结尾为.js 或者开头为020-的电话格式

对于我们是否写对了规则,我们可以用test()方法试一试 test()好比一面照妖镜

var a=/hello/i
console.log(a.test('heelo') //false
复制代码

说明heelo和a不匹配,是个假的。 下面分别说明上述几种

  1. 包含[],这种关系类似于数学之中排列组合,例如[abc],代表a,b,c所能组成的各种组合
let a=/[0-9]/;
console.log(a.test(9))  //true
console.log(a.test(90)) //true
console.log(a.test('90')) //true
console.log(a.test('90SS')) //true
console.log(a.test('ABCD')) //falselet b=/[0]/;
console.log(b.test(9))  //fasle
console.log(b.test(90)) //true
复制代码
let a=/[abc]/;
console.log(a.test('a'))  //true
console.log(a.test('ac')) //true
console.log(a.test('abc')) //true
console.log(a.test('ABCD')) //false
复制代码
let a=/[*&$]/;
console.log(a.test('*'))  //true
console.log(a.test('*$')) //true
复制代码

下面有几个常用的[]写法

1.[a-z] 包含字母let a=/[a-z]/;console.log(a.test('a'))  //trueconsole.log(a.test('Z')) //false 因为区分大小写console.log(a.test('abc')) //trueconsole.log(a.test('aS'))   //true
2.[A-Za-z0-9]包含大写或小写字母或数字
复制代码

单单使用[]是有局限的,因为它能匹配的实在是太宽泛了,只要包含即可。例如[a-z],对于字符'a2'也是符合的。要使得我们匹配更加精确,正则表达式还有许多武器,例如元字符。 元字符个人理解是一种限制规则来缩小匹配范围 一般来说有

限定属性以及长度。

   \d 表示匹配一位整数 相反\D匹配一个非数字;\w 表示匹配一位英文单词 相反\W匹配一个非英文单词;\s 表示匹配一位空格 相反\S匹配一个非空格;...更多可以参考 http://www.runoob.com/jsref/jsref-obj-regexp.html
复制代码

使用这个有什么用呢?你已经知道了属性和长度,你可以去检测某些连在一起的特征,例如你现在有一篇英文的文章,我需要找到特征: 3位数字+3位字母的部分标红:

let txt='s23df12S456abx';  ==> /\d\d\d\w\w\w/let a=/\d\d/;
console.log(a.test('1'))    //false 
console.log(a.test('12'))    //true
console.log(a.test('1ac2'))  //false 必须两个相连
let b=/\s/;
console.log(b.test('my file.js')) //true 检测是否含有空格
复制代码

限定位置

我们已经会使用属性加长度了,但是有时候往往我们也需要位置的限定 。下面列举几个常用的元字符

$ 表示结尾 例如/js$/表示js不能再有任何字符串了,空格也不行
let a=/hello$/;
console.log(a.test('hello'))    //true 
console.log(a.test('hello world')) //false
console.log(a.test('hello  ')) //false
^ 表示开头 意思和 $ 相反 即使空格也不行,一般^和$成对使用,可以构造出一些常用的正则表达式。
例如
由字母和数字组成,长度不限的话可以表示为
/^[A-Za-z0-9]$/
let a=/^[A-Za-z0-9]$/;
console.log(a.test('我a'))    //false
console.log(a.test('$123a')) //false
console.log(a.test('hello 23')) //fasle
console.log(a.test('hello23 ')) //false
复制代码

如果想要使得空格也可以匹配 可以使用\b \b表示边界,可以为开头或者结尾 例如 ' hello,world '

 let a=/\bhi\b/;console.log(a.test('hi'))    //trueconsole.log(a.test('him')) //false 后面有mconsole.log(a.test('hi m')) //true hi是单独的console.log(a.test('shi')) //false 前面有s
复制代码

量词使用

例如我们想匹配连续三个数字,我们可以:

/\d\d\d/
复制代码

假如要匹配100个呢 写100个吗?我们不可能手动写100个吧 我们有下面几个常用的表述:

  1. +表示重复 n+匹配任何包含至少一个 n 的字符串。 /abc+/ 可以匹配 abc abcc abccccc abccccd
  2. *表示匹配任何包含至少0个或者一个 n 的字符串
/abc*/ 可以匹配 ab abc abccc abccd 可以不包括c
复制代码
  1. {}使用 上述+和*号范围都可以多到无限多。但是要表示具体多少个呢 我们可以使用{},这类似于数学里的表示范围[a,b]
let a=/^c{1,3}$/;
console.log(a.test('c'))   //true
console.log(a.test('cc')) //true
console.log(a.test('ccc')) //true
console.log(a.test('cccc')) //false
其中{1,3}表示出现1-3个 
{1,}表示匹配一个或者一个以上
{1}表示只匹配一个。
复制代码

当然还有许多正则表达式规则了,实在写不完了,读者可以自行百度。(完)

转载于:https://juejin.im/post/5be983cc6fb9a049d2359488

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/389235.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/389235.shtml
英文地址,请注明出处:http://en.pswp.cn/news/389235.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现klib_使用klib加速数据清理和预处理

实现klibTL;DRThe klib package provides a number of very easily applicable functions with sensible default values that can be used on virtually any DataFrame to assess data quality, gain insight, perform cleaning operations and visualizations which results …

MMDetection修改代码无效

最近在打比赛,使用MMDetection框架,但是无论是Yolo修改类别还是更改head,代码运行后发现运行的是修改之前的代码。。。也就是说修改代码无效。。。 问题解决办法: MMDetection在首次运行后会把一部分运行核心放在anaconda的环境…

docker etcd

etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,用于配置共享和服务发现 etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。 etcd作为服务发现系统,有以下的特点&…

SpringBoot简要

2019独角兽企业重金招聘Python工程师标准>>> 简化Spring应用开发的一个框架;      整个Spring技术栈的一个大整合;      J2EE开发的一站式解决方案;      自动配置:针对很多Spring应用程序常见的应用功能&…

发送邮件 的类 C# .net

/// <summary> /// 发送邮件 /// </summary> /// <param name"SendTo">发送人的地址</param> /// <param name"MyEmail">我的Email地址</param> /// <param name"SendTit…

简明易懂的c#入门指南_统计假设检验的简明指南

简明易懂的c#入门指南介绍 (Introduction) One of the main applications of frequentist statistics is the comparison of sample means and variances between one or more groups, known as statistical hypothesis testing. A statistic is a summarized/compressed proba…

计算机科学期刊_成为数据科学家的五种科学期刊

计算机科学期刊The field of data science is advancing at an incredible pace. New scientific articles are published daily. As a student, I try to stay up-to-date with the scientific literature that is published. In this blog post, I created a list of scienti…

Torch.distributed.elastic 关于 pytorch 不稳定

错误日志&#xff1a; Epoch: [229] Total time: 0:17:21 Test: [ 0/49] eta: 0:05:00 loss: 1.7994 (1.7994) acc1: 78.0822 (78.0822) acc5: 95.2055 (95.2055) time: 6.1368 data: 5.9411 max mem: 10624 WARNING:torch.distributed.elastic.agent.server.api:Rec…

0x22 迭代加深

poj2248 真是个新套路。还有套路剪枝...大到小和判重 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> #include<bitset> using namespace std;int n,D,x[110];bool…

云原生全球最大峰会之一KubeCon首登中国 Kubernetes将如何再演进?

雷锋网消息&#xff0c;11月14日&#xff0c;由CNCF发起的云原生领域全球最大的峰会之一KubeConCloudNativeCon首次登陆中国&#xff0c;中国已经成为云原生领域一股强大力量&#xff0c;并且还在不断成长。 毫无疑问&#xff0c;Kubernetes已经成为容器编排事实标准&#xff…

分布分析和分组分析_如何通过群组分析对用户进行分组并获得可行的见解

分布分析和分组分析数据分析 (DATA ANALYSIS) Being a regular at a restaurant is great.乙 eing定期在餐厅是伟大的。 When I started university, my dad told me I should find a restaurant I really liked and eat there every month with some friends. Becoming a reg…

python 工具箱_Python交易工具箱:通过指标子图增强图表

python 工具箱交易工具箱 (trading-toolbox) After a several months-long hiatus, I can finally resume posting to the Trading Toolbox Series. We started this series by learning how to plot indicators (specifically: moving averages) on the top of a price chart.…

PDA端的数据库一般采用的是sqlce数据库

PDA端的数据库一般采用的是sqlce数据库,这样与PC端的sql2000中的数据同步就变成了一个问题,如在PDA端处理,PDA端的内存,CPU等都是一个制约因素,其次他们的一个连接稳定及其间的数据传输也是一个难点.本例中通过在PC端的转化后再复制到PDA上面,这样,上面所有的问题都得到了一个有…

bzoj 1016 [JSOI2008]最小生成树计数——matrix tree(相同权值的边为阶段缩点)(码力)...

题目&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id1016 就是缩点&#xff0c;每次相同权值的边构成的联通块求一下matrix tree。注意gauss里的编号应该是从1到...的连续的。 学习了一个TJ。用了vector。自己曾写过一个只能过样例的。都放上来吧。 路径压缩的…

区块链的模型结构

关于区块链的模型结构问题&#xff0c;行业内已经谈论千万遍了&#xff0c;基本上已经成为一种定义式的问题了。总体上来看&#xff0c;区块链的基础架构可以分为六层&#xff0c;包括数据层、网络层、共识层、激励层、合约层、应用层。每一层分别完成一项核心的功能&#xff0…

数据科学家 数据工程师_数据科学家应该对数据进行版本控制的4个理由

数据科学家 数据工程师While working in a software project it is very common and, in fact, a standard to start right away versioning code, and the benefits are already pretty obvious for the software community: it tracks every modification of the code in a p…

JDK 下载相关资料

所有版本JDK下载地址&#xff1a; http://www.oracle.com/technetwork/java/archive-139210.html 下载账户密码&#xff1a; 2696671285qq.com Oracle123 转载于:https://www.cnblogs.com/bg7c/p/9277729.html

商米

2019独角兽企业重金招聘Python工程师标准>>> 今天看了一下商米的官网&#xff0c;发现他家的东西还真的是不错。有钱了&#xff0c;想去体验一下。 如果我妹妹还有开便利店的话&#xff0c;我会推荐他用这个。小巧便捷&#xff0c;非常方便。 转载于:https://my.osc…

C#生成安装文件后自动附加数据库的思路跟算法

using System; using System.Collections.Generic; using System.Windows.Forms; using System.Data.SqlClient; using System.Data; using System.ServiceProcess; namespace AdminZJC.DataBaseControl { /// <summary> /// 数据库操作控制类 /// </summary> …

python交互式和文件式_使用Python创建和自动化交互式仪表盘

python交互式和文件式In this tutorial, I will be creating an automated, interactive dashboard of Texas COVID-19 case count by county using python with the help of selenium, pandas, dash, and plotly. I am assuming the reader has some familiarity with python,…