学习笔记-正则表达式[通俗易懂]

学习笔记-正则表达式[通俗易懂]学习笔记-正则表达式

大家好,又见面了,我是你们的朋友全栈君。

参考 

1.MDN正则表达式 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions 2.https://www.cnblogs.com/tugenhua0707/p/5037811.html

1 创建一个正则表达式

两种方法 

方法1:使用一个正则表达式字面量,其由包含在斜杠之间的模式组成

const regex1 = /ab+c/; 
const regex2 = /^[a-zA-Z]+[0-9]*\W?_$/gi;
复制代码

方法2:调用RegExp对象的构造函数

var regex1 = new RegExp("ab+c");
var regex2 = new RegExp(/^[a-zA-Z]+[0-9]*\W?_$/, "gi");
var regex3 = new RegExp("^[a-zA-Z]+[0-9]*\\W?_$", "gi");
复制代码

2 支持正则表达式的String对象的方法

2.1 search()

用法:执行正则表达式和 String对象之间的一个搜索匹配 

语法:str.search(regexp) 

返回值:如果匹配成功,返回正则表达式在字符串中首次匹配项的索引。否则,返回 -1。

例:

var str = 'hello world,hello world'
console.log(str.search(/hello/)) // 0
console.log(str.search('world')) // 6
console.log(str.search(/123/))  // -1
复制代码

2.2 match()

用法:当一个字符串与一个正则表达式匹配时, match()方法检索匹配项 

语法:str.match(regexp) 

返回值:如果字符串匹配到了表达式,会返回一个数组,数组的第一项是进行匹配完整的字符串,之后的项是用圆括号捕获的结果。如果没有匹配到,返回null。

例:

var str = "hello world"
console.log(str.match("hello")) // ["hello", index: 0, input: "hello world", groups: undefined]
console.log(str.match("Hello")) // null
console.log(str.match(/hello/)) // ["hello", index: 0, input: "hello world", groups: undefined]
// 全局匹配
var str2="1 plus 2 equal 3"
console.log(str2.match(/\d+/g)); //["1", "2", "3"]
复制代码

2.3 replace() 

用法:返回一个由替换值替换一些或所有匹配的模式后的新字符串。模式可以是一个字符串或者一个正则表达式, 替换值可以是一个字符串或者一个每次匹配都要调用的函数。 

语法:str.replace(regexp|substr, newSubStr|function) 

例: 

var str = "hello world";
// 替换字符串
var s1 = str.replace("hello","a");
console.log(s1);// a world
// 使用正则替换字符串
var s2 = str.replace(/hello/,"b");
console.log(s2); // b world

// 使用正则全局替换 字符串
var s3 = str.replace(/l/g,'');
console.log(s3); // heo word

// $1,$2 代表的是第一个和第二个子表达式相匹配的文本
// 子表达式需要使用小括号括起来,代表的含义是分组
var name = "xiao,yao";
var s4 = name.replace(/(\w+)\s*,\s*(\w+)/,"$2 $1");
console.log(s4); // "yao,xiao"
// $& 是与RegExp相匹配的子字符串
var name = "hello I am a chinese people";
var regexp = /am/g;
if(regexp.test(name)) {
    //返回正则表达式匹配项的字符串
    console.log(RegExp['$&']);  // am

    //返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。
    console.log(RegExp["$'"]); // a chinese people

    //返回被查找的字符串从字符串开始的位置到最后匹配之前的位置之间的字符。
    console.log(RegExp['$`']);  // hello I 
    
    // 返回任何正则表达式查找过程中最后括号的子匹配。
    console.log(RegExp['$+']); // 空字符串

    //返回任何正则表达式搜索过程中的最后匹配的字符。
    console.log(RegExp['$_']);  // hello I am a chinese people
}

// replace 第二个参数也可以是一个function 函数
var name2 = "123sdasadsr44565dffghg987gff33234";
name2.replace(/\d+/g,function(v){
    console.log(v); 
    /*
     * 第一次打印123
     * 第二次打印44565
     * 第三次打印987
     * 第四次打印 33234
     */
});
/*
 * 如下函数,回调函数参数一共有四个
 * 第一个参数的含义是 匹配的字符串
 * 第二个参数的含义是 正则表达式分组内容,没有分组的话,就没有该参数,
 * 如果没有该参数的话那么第四个参数就是undefined
 * 第三个参数的含义是 匹配项在字符串中的索引index
 * 第四个参数的含义是 原字符串
 */
 name2.replace(/(\d+)/g,function(a,b,c,d){
    console.log(a);
    console.log(b);
    console.log(c);
    console.log(d);
    /*
     * 如上会执行四次,值分别如下(正则使用小括号,代表分组):
     * 第一次: 123,123,0,123sdasadsr44565dffghg987gff33234
     * 第二次: 44565,44565,11,123sdasadsr44565dffghg987gff33234
     * 第三次: 987,987,22,123sdasadsr44565dffghg987gff33234
     * 第四次: 33234,33234,28,123sdasadsr44565dffghg987gff33234
     */
 });
复制代码

2.4 split()

作用:使用指定的分隔符字符串将一个String对象分割成字符串数组,以将字符串分隔为子字符串,以确定每个拆分的位置。

语法:str.split([separator[, limit]])

例:

var str = "what are you doing?";
// 以" "分割字符串
console.log(str.split(" "));
// 打印 ["what", "are", "you", "doing?"]

// 以 "" 分割字符串
console.log(str.split(""));
/*
 * 打印:["w", "h", "a", "t", " ", "a", "r", "e", " ", "y", "o", "u", " ", "d", "o", "i", "n", 
 * "g", "?"]
 */
// 指定返回数组的最大长度为3
console.log(str.split("",3));
// 打印 ["w", "h", "a"]
复制代码

3 RegExp对象方法

3.1 test()

作用:执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。 

语法:regexObj.test(str) 返回:如果正则表达式与指定的字符串匹配 ,返回true;否则false。

例:

let str = "xiao and yao";
console.log(/xiao/.test(str)); // true
console.log(/xiaoxiao/.test(str)); //false

// 或者创建RegExp对象模式
let regexp = new RegExp("xiao");
console.log(regexp.test(str)); // true
复制代码

3.2 exec()

作用:在一个指定字符串中执行一个搜索匹配。 

语法:regexObj.exec(str) 

返回:如果匹配成功,返回一个数组,并更新正则表达式对象的属性。返回的数组将完全匹配成功的文本作为第一项,将正则括号里匹配成功的作为数组填充到后面。 如果匹配失败,exec() 方法返回 null。

例:

let str = "xiao and yao";
console.log(/xiao/.exec(str)); 
// ["xiao", index: 0, input: "xiao and yao", groups: undefined]

console.log(/wo/.exec(str)); // null
复制代码

4 正则表达式实战

4.1 匹配以数字结尾的正则

正则:/\d+$/g

4.2 去掉空格

let str = "我 是 肖 瑶"
console.log(str)    // 我 是 肖 瑶
console.log(str.replace(/\s+/g,'')) // 我是肖瑶
复制代码

4.3 判断字符串是不是由数字组成

let str1 = "1234xixihaha"
let str2 = "7788"
let reg = /^\d*$/

console.log(reg.test(str1))     // false
console.log(reg.test(str2))     // true
复制代码

4.4 电话号码

分析如下: 

组成:区号-电话号码 或 区号-电话号码-分机号 

区号正则:/\d{3,4}/ 

电话号码:/\d{7,8}/ 

分机号:/\d{3,4}/ 

完整的电话号码正则:/^\d{3,4}-\d{7,8}(-\d{3,4})?$/

4.5 手机号码

let str1 = "18688666688"
let str2 = "1234567890"
let reg = /^1[3|4|5|7|8][0-9]{9}$/
console.log(reg.test(str1)) // true
console.log(reg.test(str2)) // false
复制代码

4.6 删除字符串左右空格

let reg = /^\s+|\s+$/g
let str1 = "123 "
let str2 = " 123"
let str3 = " 123 "
console.log(str1.replace(reg,''))
console.log(str2.replace(reg,''))
复制代码

4.7 限制文本框只能输入整数或小数(二位小数)

let reg = /^\d*\.?\d{0,2}$/
let str1 = .9
let str2 = 1.99
let str3 = "1a.99"

console.log(reg.test(str1)) // true
console.log(reg.test(str2)) // true
console.log(reg.test(str3)) // false
复制代码

4.8 匹配中文的正则

使用 Unicode

let reg = /[\u4E00-\u9FA5\uf900-\ufa2d]/g
console.log(reg.test("我是")) //true
console.log(reg.test("aa"))     // false
复制代码

4.9 返回字符串中 中文字符的个数

分析: 使用replace方法把不是中文字符全部替换成空,返回被替换的字符,都是中文字符,计算长度

let str = "aaa肖瑶bbb嘻嘻哈哈111"
let reg = /[^\u4E00-\u9FA5\uf900-\ufa2d]/g

let strChange = str.replace(reg,'')
console.log(strChange)      // 肖瑶嘻嘻哈哈
console.log(strChange.length)   // 6
复制代码

4.9 IP地址

let reg = /^\d{1-3}\.\d{1-3}\.\d{1-3}\.\d{1-3}$/
复制代码

4.10 匹配标签中的内容

比如匹配如代码 <ul><li>aaa</li><li>bbb</li></ul> 

分析:想获取ul中的内容,可以对匹配的内容使用分组 [\s\S]+ 空白和非空白字符

let str1 = "<ul><li>aaa</li><li>bbb</li></ul>"
let reg = /<ul>([\s\S]+)<\/ul>/g
str1.match(reg)
console.log(RegExp.$1)  // <li>aaa</li><li>bbb</li>
复制代码

4.11 身份证号码的匹配

匹配规则:身份证号码有15位或者18位,其中最后一位可能是X,其他全是数字

let reg = /^(\d{14}|\d{17})(\d|[xX])$/
let identity1 = "430304199701012787"
let identity2 = "43030419970101278X"
let identity3 = "43030419970101278a"

console.log(reg.test(identity1))    // true
console.log(reg.test(identity2))    // true
console.log(reg.test(identity3))    // false
复制代码

4.12 IP地址

let reg = /^\d{1-3}\.\d{1-3}\.\d{1-3}\.\d{1-3}$/
复制代码

4.13 邮箱的正则表达式

/^([a-zA-Z_0-9-])+@([a-zA-Z_0-9-])+(\.[a-zA-Z_0-9-])+$/
复制代码

5 结语

文章若有错误,还望指正。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107311.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ResNet18和ResNet50的keras实现

    ResNet18和ResNet50的keras实现fromtensorflowimportkerasfromtensorflow.kerasimportlayersINPUT_SIZE=224CLASS_NUM=1000#stage_name=2,3,4,5;block_name=a,b,c,d,e,fdefConvBlock(input_tensor,num_output,stride,stage_name,block_name):filter1,filter2,filter3=num_

  • linux修改sftp端口的方法:2个地方需要修改「建议收藏」

    linux修改sftp端口的方法:2个地方需要修改「建议收藏」SSH配置文件有两个都放在/etc/ssh/ssh_config和/etc/ssh/sshd_config在ssh_config中,找到#port22,在其下面就加入port8080同时,在sshd_config中,找到#port22,在其下面就加入port8080(与上面相同)之后重启sshservicesshdrestart…

  • 2022 CCF中国开源大会会议通知(第四轮)[通俗易懂]

    2022 CCF中国开源大会会议通知(第四轮)[通俗易懂]2022CCF中国开源大会(CCFChinaOSC)拟于2022年8月20日至21日在陕西省西安高新国际会议中心召开。大会由中国计算机学会(CCF)与开放原子开源基金会主办,CCF开源发展委员会、西安电子科技大学承办,西安电子科技大学计算机科学与技术学院(国家示范性软件学院)具体落实,西安市智能软件工程重点实验室负责实施,得到西安高新区管委会的大力支持,西安软件园发展中心具体执行。大会由华为技术有限公司作为白金赞助商,阿里巴巴集团、汇丰科技、东软集团股份有限公司、江苏引跑网络科技有限公司作为赞助商。本届

  • pycharm2021怎么使用_第一次打开pycharm2021

    pycharm2021怎么使用_第一次打开pycharm2021Pycharm是一种PythonIDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理,代码跳转,只能提示,自动完成,单元测试、脚本控制。此外,该IDE提供了一些高级功能,用于支持Django框架下的专业Web开发,同时支持GoogleAppEngine,更酷的是Pycharm支持IronPython…

  • 如何测试硬盘软件,win10系统怎么用硬盘检测工具HDTune【图文】「建议收藏」

    如何测试硬盘软件,win10系统怎么用硬盘检测工具HDTune【图文】「建议收藏」HDTune是一款专业的硬盘检测工具,虽然占用内存不大,但是能够全面的检测硬盘的传输速度、温度以及健康状况等。很多新手用户可能并不知道HDTune怎么用,对此,小编特意去整理win10系统硬盘检测工具HDTune的使用方法。具体方法如下:1、HDTune使用方法很简单,打开HDTune硬盘检测工具后我们可以选择硬盘,在主界面就可以看到硬盘的温度;2、在HDTune硬盘检测工具右侧选择读取或者写入,…

  • map改变一个字母是什么_组合总和 leetcode

    map改变一个字母是什么_组合总和 leetcode原题链接给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[ [“ate”,”eat”,”tea”], [“nat”,”tan”], [“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。tclass Solution {public: vector<vector<string>> g

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号