- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章JavaScript正则表达式迷你书之贪婪模式-学习笔记由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
贪婪模式:
在使用修饰匹配次数的特殊符号时,有几种表示方法可以使同一个表达式能够匹配不同的次数,比如:"{m,n}", "{m,}", "?", "*", "+",具体匹配的次数随被匹配的字符串而定。这种重复匹配不定次数的表达式在匹配过程中,总是尽可能多的匹配 。
非贪婪模式:
在修饰匹配次数的特殊符号后再加上一个 "?" 号,则可以使匹配次数不定的表达式尽可能少的匹配,使可匹配可不匹配的表达式,尽可能的 "不匹配"。这种匹配原则叫作 "非贪婪" 模式,也叫作 "勉强" 模式。如果少匹配就会导致整个表达式匹配失败的时候,与贪婪模式类似,非贪婪模式会最小限度的再匹配一些,以使整个表达式匹配成功.
1
2
3
4
|
var
regex = /\d{2,5}/g;
var
string =
"123 1234 12345 123456"
;
console.log( string.match(regex) );
// => ["123", "1234", "12345", "12345"]
|
其中正则 /d{2,5}/,表示数字连续出现 2 到 5 次。会匹配 2 位、3 位、4 位、5 位连续数字。 但是其是贪婪的,它会尽可能多的匹配。你能给我 6 个,我就要 5 个。你能给我 3 个,我就要 3 个。 反正只要在能力范围内,越多越好.
横向模糊匹配 。
横向模糊指的是,一个正则可匹配的字符串的长度不是固定的,可以是多种情况的。 其实现的方式是使用量词。譬如 {m,n},表示连续出现最少 m 次,最多 n 次。 比如正则 /ab{2,5}c/ 表示匹配这样一个字符串:第一个字符是 "a",接下来是 2 到 5 个字符 "b",最后是字符 "c".
1
2
3
4
|
var
regex = /ab{2,5}c/g;
var
string =
"abc abbc abbbc abbbbc abbbbbc abbbbbbc"
;
console.log( string.match(regex) );
// => ["abbc", "abbbc", "abbbbc", "abbbbbc"]
|
纵向模糊匹配 。
纵向模糊指的是,一个正则匹配的字符串,具体到某一位字符时,它可以不是某个确定的字符,可以有多种 可能。 其实现的方式是使用字符组。 譬如 [abc],表示该字符是可以字符 "a"、"b"、"c" 中的任何一个。 比如 /a[123]b/ 可以匹配如下三种字符串: "a1b"、"a2b"、"a3b".
1
2
3
4
5
|
var
regex = /\d{2,5}?/g;
var
string =
"123 1234 12345 123456"
;
console.log( string.match(regex) );
// => ["12", "12", "34", "12", "34", "12", "34", "56"]
其中 /\d{2,5}?/ 表示,虽然 2 到 5 次都行,当 2 个就够的时候,就不再往
|
多选分支 。
一个模式可以实现横向和纵向模糊匹配。而多选分支可以支持多个子模式任选其一。 具体形式如下:(p1|p2|p3),其中 p1、p2 和 p3 是子模式,用 |(管道符)分隔,表示其中任何之一。 例如要匹配字符串 "good" 和 "nice" 可以使用 /good|nice/.
1
2
3
4
|
var
regex = /good|nice/g;
var
string =
"good idea, nice try."
;
console.log( string.match(regex) );
// => ["good", "nice"]
|
但有个事实我们应该注意,比如我用 /good|goodbye/,去匹配 "goodbye" 字符串时,结果是 "good" 。
1
2
3
4
|
var
regex = /good|goodbye/g;
var
string =
"goodbye"
;
console.log( string.match(regex) );
// => ["good"]
|
而把正则改成 /goodbye|good/,结果是:
1
2
3
4
|
var
regex = /goodbye|good/g;
var
string =
"goodbye"
;
console.log( string.match(regex) );
// => ["goodbye"]
|
也就是说,分支结构也是惰性的,即当前面的匹配上了,后面的就不再尝试了.
反向引用 。
比如要写一个正则支持匹配如下三种格式 。
2020-02-25 2020/02/25 2020.02.25 。
1
2
3
4
5
6
7
8
9
|
var
regex = /\d{4}(-|\/|.)\d{2}(-|\/|.)\d{2}/;
var
string1 =
"2020-06-12"
;
var
string2 =
"2020/06/12"
;
var
string3 =
"2020.06.12"
;
var
string4 =
"2020-02/12"
;
console.log( regex.test(string1) );
// true
console.log( regex.test(string2) );
// true
console.log( regex.test(string3) );
// true
console.log( regex.test(string4) );
// true
|
其中 / 和 . 需要转义。虽然匹配了要求的情况,但也匹配 "2016-06/12" 这样的数据.
假设我们想要求分割符前后一致怎么办?此时需要使用反向引用:
1
2
3
4
5
6
7
8
9
|
var
regex = /\d{4}(-|\/|.)\d{2}\1\d{2}/;
var
string1 =
"2020-06-12"
;
var
string2 =
"2020/06/12"
;
var
string3 =
"2020.06.12"
;
var
string4 =
"2020-02/12"
;
console.log( regex.test(string1) );
// true
console.log( regex.test(string2) );
// true
console.log( regex.test(string3) );
// true
console.log( regex.test(string4) );
// false
|
注意里面的 1,表示的引用之前的那个分组 (-|/|.)。不管它匹配到什么(比如 -),1 都匹配那个同 样的具体某个字符.
我们知道了 1 的含义后,那么 2 和 3 的概念也就理解了,即分别指代第二个和第三个分组.
使用例子 。
字符串 trim 方法模拟 。
1
2
3
|
function
trim(str) {
return
str.replace(/^\s+|\s+$/g,
''
);
}
|
表示一个 16 进制字符,可以用字符组 [0-9a-fA-F]。 其中字符可以出现 3 或 6 次,需要是用量词和分支结构。 使用分支结构时,需要注意顺序。 正则如下 。
1
2
3
4
|
var
regex = /
#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;
var
string =
"#ffbbad #Fc01DF #FFF #ffE"
;
console.log( string.match(regex) );
// => ["#ffbbad", "#Fc01DF", "#FFF", "#ffE"]
|
上面内容就结束了,下面是其他网友的补充可以参考一下 。
var regExp = /8.*8/; var str = "8google8 8google8 8google8",
上面例子,是贪婪模式,其实是用了重复(区间)匹配的正则表达式都为贪婪模式 。
前瞻模式是指某个匹配后面必须跟着某个字符串,例子如下 。
var regExp = /goo(?=gle)/; var strOne = google; var strTwo = googoo,
定语式 返回匹配的是 后面是带 gle 的; 。
捕获性分组和非捕获性分组:例子如下:
var regExp = /(google)\s(2020)/; var str = "google 2020",
返回的 是一组数组[ google 2020,google,2020] 。
var regExp = /(google)\s(?:2020)/; var str = "google 2020" 。
返回的数组[google 2020,google] 。
以上是看到一个微博 记录以便以后学习 。
以上就是JavaScript正则表达式迷你书之贪婪模式-学习笔记的详细内容,更多关于正则表达式迷你书的资料请关注我其它相关文章! 。
最后此篇关于JavaScript正则表达式迷你书之贪婪模式-学习笔记的文章就讲到这里了,如果你想了解更多关于JavaScript正则表达式迷你书之贪婪模式-学习笔记的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
介绍篇 什么是MiniApis? MiniApis的特点和优势 MiniApis的应用场景 环境搭建 系统要求 安装MiniApis 配置开发环境 基础概念 MiniApis架构概述
我正在从“JavaScript 圣经”一书中学习 javascript,但我遇到了一些困难。我试图理解这段代码: function checkIt(evt) { evt = (evt) ? e
package com.fastone.www.javademo.stringintern; /** * * String.intern()是一个Native方法, * 它的作用是:如果字
您会推荐哪些资源来学习 AppleScript。我使用具有 Objective-C 背景的传统 C/C++。 我也在寻找有关如何更好地开发和从脚本编辑器获取更快文档的技巧。示例提示是“查找要编写脚本的
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
关闭。这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 想改善这个问题吗?更新问题,以便堆栈溢出为 on-topic。 6年前关闭。 Improve this
我是塞内加尔的阿里。我今年60岁(也许这是我真正的问题-笑脸!!!)。 我正在学习Flutter和Dart。今天,我想使用给定数据模型的列表(它的名称是Mortalite,请参见下面的代码)。 我尝试
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
学习 Cappuccino 的最佳来源是什么?我从事“传统”网络开发,但我对这个新框架非常感兴趣。请注意,我对 Objective-C 毫无了解。 最佳答案 如上所述,该网站是一个好地方,但还有一些其
我正在学习如何使用 hashMap,有人可以检查我编写的这段代码并告诉我它是否正确吗?这个想法是有一个在公司工作的员工列表,我想从 hashMap 添加和删除员工。 public class Staf
我正在尝试将 jQuery 与 CoffeScript 一起使用。我按照博客中的说明操作,指示使用 $ -> 或 jQuery -> 而不是 .ready() 。我玩了一下代码,但我似乎无法理解我出错
还在学习,还有很多问题,所以这里有一些。我正在进行 javascript -> PHP 转换,并希望确保这些做法是正确的。是$dailyparams->$calories = $calories;一条
我目前正在学习 SQL,以便从我们的 Magento 数据库制作一个简单的 RFM 报告,我目前可以通过导出两个查询并将它们粘贴到 Excel 模板中来完成此操作,我想摆脱 Excel 模板。 我认为
我知道我很可能会因为这个问题而受到抨击,但没有人问,我求助于你。这是否是一个正确的 javascript > php 转换 - 在我开始不良做法之前,我想知道这是否是解决此问题的正确方法。 JavaS
除了 Ruby-Doc 之外,哪些来源最适合获取一些示例和教程,尤其是关于 Ruby 中的 Tk/Tile?我发现自己更正常了 http://www.tutorialspoint.com/ruby/r
我只在第一次收到警告。这正常吗? >>> cv=LassoCV(cv=10).fit(x,y) C:\Python27\lib\site-packages\scikit_learn-0.14.1-py
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
我是一名优秀的程序员,十分优秀!