JavaScript 3.3 正则表达式2

手把手教你打造CTF动态靶场 公司想搞一个CTF比赛,需要一个竞赛靶场,于是这个任务就落在了我的身上,平台是利用CTFd框架,基于docker搭建的动态靶场,搭建过程中遇到的坑比较多,这里我会把每一个遇到的坑都指出来。我搭建的是CTFd的3.X的版本。第一次搭建的话,搭建的过程会有些痛苦,但是搭建完成后会越来越熟练,这个平台的可用性还是很高的。由于搭建的过程中遇到的坑太多了,各种各样的问题,所以决定写下这篇文章,把所有的坑都指出来,也算为后边想搭这个平台的小伙伴指一条路。Taps:资源来源:星海安全实验室如果你也对网络安全&黑客。 阅读详情

参考文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

1、将用户输入转换成正则表达式中字面字符串

function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); 
  //$&表示整个被匹配的字符串
}

2、正则表达式标志 

g全局搜索。
i不区分大小写搜索。
m多行搜索。
s允许 . 匹配换行符。
u使用unicode码的模式进行匹配。
y执行“粘性(sticky)”搜索,匹配从目标字符串的当前位置开始

 

3、正则常用方法

test方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。
/*
语法
regexObj.test(str)

如果正则表达式设置了全局标志,test() 的执行会改变正则表达式   
lastIndex属性。连续的执行test()方法,后续的执行将会从 
lastIndex 处开始匹配字符串。

*/

var re = /^./g;
console.log(re.test("foo"));//true
console.log(re.lastIndex);//1
console.log(re.test("foo"));//false

//不加全局标志
var re = /^./;
console.log(re.test("foo"));//true
console.log(re.lastIndex);//0
console.log(re.test("foo"));//true


//也可以手动修改lastindex
var re = /^./g;
re.lastIndex=1;
console.log(re.test("foo"));//false
exec在一个指定字符串中执行一个搜索匹配。返回一个结果数组或null。
/*
语法
regexObj.exec(str)

在有全局标志的情况下会把上次成功匹配后的位置记录在 
lastIndex 属性中,且可以根据lastIndex进行遍历匹配结果
如果匹配失败,exec() 方法返回 null,并将 lastIndex 重置为 0
*/

var re = /quick\s(?<name1>brown).+?(?<name2>jumps)/ig;
var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');
console.log(result);
/*
output:
0: "Quick Brown Fox Jumps"    //全部匹配会存在数组下标0位置
捕获组会从数组下标1依次往后进行存储,我们可以通过下标
对每一个捕获组进行遍历
1: "Brown"                   
2: "Jumps"
捕获组命名,通过(?<>)方式来命名
groups: {name1: "Brown", name2: "Jumps"}
index: 4  //对字符串开始匹配的歧视位置,即例中的Q位置
input: "The Quick Brown Fox Jumps Over The Lazy Dog"//原始字符串

console.log(RegExp.prototype);
原型链中的常用属性
lastIndex: 下一次匹配开始的位置
ignoreCase :是否使用了 "i" 标记使正则匹配忽略大小写
global :是否使用了 "g" 标记来进行全局的匹配
multiline :是否使用了 "m" 标记使正则工作在多行模式
source : 正则匹配的字符串	
flags :正则标志

*/
match检索返回一个字符串匹配正则表达式的结果
/*
语法
str.match(regexp)
一个正则表达式对象。如果传入一个非正则表达式对象,则会隐式
地使用 new RegExp(obj) 将其转换为一个 RegExp 。如果你没有
给出任何参数并直接使用match() 方法 ,
你将会得到一个包含空字符串的 Array :[""] 。

*/

//如果使用g标志,则将返回与完整正则表达式匹配的所有结果,
但不会返回捕获组
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);

console.log(matches_array);
// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']

//如果未使用g标志,则仅返回第一个完整匹配及其相关的捕获组(Array)。
在这种情况下,返回的项目将具有如下所述的其他属性。同exec方法

var str = 'For more information, see Chapter 3.4.5.1';
var re = /see (chapter \d+(\.\d)*)/i;
var found = str.match(re);

console.log(found);

// logs [ 'see Chapter 3.4.5.1',
//        'Chapter 3.4.5.1',
//        '.1',
//        index: 22,
//        input: 'For more information, see Chapter 3.4.5.1' ]

// 'see Chapter 3.4.5.1' 是整个匹配。
// 'Chapter 3.4.5.1' 被'(chapter \d+(\.\d)*)'捕获。
// '.1' 是被'(\.\d)'捕获的最后一个值。
// 'index' 属性(22) 是整个匹配从零开始的索引。
// 'input' 属性是被解析的原始字符串。
matchAll返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器
/*
语法
str.matchAll(regexp)
返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器,matchAll必须加全局g标志,
不加会抛异常
matchAll匹配时lastIndex值并不会改变

*/
const regexp = RegExp('foo[a-z]*','g');
const str = 'table football, foosball';
const matches = str.matchAll(regexp);

for (const match of matches) {
  console.log(`Found ${match[0]} start=${match.index} 
        end=${match.index + match[0].length}.`);
}
// expected output: "Found football start=6 end=14."
// expected output: "Found foosball start=16 end=24."

// matches iterator is exhausted after the for..of iteration
// Call matchAll again to create a new iterator
Array.from(str.matchAll(regexp), m => m[0]);
// Array [ "football", "foosball" ]

//matchAll可以更方便的获取捕获组
let array = [...str.matchAll(regexp)];

array[0];
// ['test1', 'e', 'st1', '1', index: 0, input: 'test1test2', length: 4]
array[1];
// ['test2', 'e', 'st2', '2', index: 5, input: 'test1test2', length: 4]
search执行正则表达式和 String 对象之间的一个搜索匹配
/*
语法
str.search(regexp)
如果匹配成功,则 search() 返回正则表达式在字符串中首次匹配项的索引;
否则,返回 -1
*/
var str = "hey JudE";
var re = /[A-Z]/g;
var re2 = /[.]/g;
console.log(str.search(re)); 
// returns 4, which is the index of the first capital letter "J"
console.log(str.search(re2)); 
// returns -1 cannot find '.' dot punctuation
replace返回一个由替换值(replacement)替换部分或所有的模式(pattern)匹配项后的新字符串。模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数。如果pattern是字符串,则仅替换第一个匹配项。
/*
语法
str.replace(regexp|substr, newSubStr|function)

方法并不改变调用它的字符串本身,而只是返回一个新的替换后的字符串。
替换字符串可以插入下面的特殊变量名
$$	插入一个 "$"。
$&	插入匹配的子串。
$`	插入当前匹配的子串左边的内容。
$'	插入当前匹配的子串右边的内容。
$n	插入第 n 个括号匹配的字符串。提示:索引是从1开始

match	匹配的子串。(对应于上述的$&。)
p1,p2, ...	对应于上述的$1,$2等
offset	匹配到的子字符串在原字符串中的偏移量。
(比如,如果原字符串是 'abcd',匹配到的子字符串是 'bc',那么这个参数将会是 1)
string	被匹配的原字符串。

*/

function replacer(match, p1, p2, p3, offset, string) {
  // p1 is nondigits, p2 digits, and p3 non-alphanumerics
  return [p1, p2, p3].join(' - ');
}
var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
console.log(newString);  // abc - 12345 - #$*%
split指定的分隔符字符串将一个String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置。 
/*
语法
str.split([separator[, limit]])
separator
指定表示每个拆分应发生的点的字符串。separator 
可以是一个字符串或正则表达式。 如果纯文本分隔符包含多个字符,
则必须找到整个字符串来表示分割点。如果在str中省略或不出现分隔符,
则返回的数组包含一个由整个字符串组成的元素。如果分隔符为空字符串,
则将str原字符串中每个字符的数组形式返回。
limit
一个整数,限定返回的分割片段数量。当提供此参数时,split 方法
会在指定分隔符的每次出现时分割该字符串,但在限制条目已放入数组时停止
。如果在达到指定限制之前达到字符串的末尾,它可能仍然包含少于限制的条目。
新数组中不返回剩下的文本。
*/
//使用一个数组来作为分隔符
const myString = 'this|is|a|Test';
const splits = myString.split(['|']);
console.log(splits); //["this", "is", "a", "Test"]

const myString = 'ca,bc,a,bca,bca,bc';
const splits = myString.split(['a','b']); 
// myString.split(['a','b']) is same as myString.split(String(['a','b'])) 
console.log(splits);  //["c", "c,", "c", "c", "c"]


靠正则来分割使结果中包含分隔块,如果 separator 包含捕获括号
(capturing parentheses),则其匹配结果将会包含在返回的数组中。
var myString = "Hello 1 word. Sentence number 2.";
var splits = myString.split(/(\d)/);
console.log(splits);
//output:[ "Hello ", "1", " word. Sentence number ", "2", "." ]

限制返回值中分割元素数量
var myString = "Hello World. How are you doing?";
var splits = myString.split(" ", 3);
console.log(splits);
//output:["Hello", "World.", "How"]
探索如何利用CST和ADS进行DDR的SIPI联合仿真 本文系统介绍了CST和ADS两款工具进行DDR信号完整性/电源完整性(SI/PI)联合仿真的方法。CST采用工作室协同方式,通过PCB布局导入、材料设置、模型分配等步骤,重点分析了电源阻抗优化和信号波形质量。ADS则利用SIPro、PIPro等专用工具,突出系统级验证和自动化优化功能。两者各有优势:CST擅长3D结构精确建模,ADS更适于快速系统验证。文章建议可根据项目需求混合使用两种工具,并提供了模型简化、频带选择等实用技巧。通过对比分析,为工程师选择仿真工具提供了决策参考。 阅读详情

相关推荐

避坑指南:解决‘Logical volume contains a filesystem in use’错误,顺利完成LVM根目录扩容

本文详细解析了Linux系统中LVM根目录扩容时遇到的‘Logical volume contains a filesystem in use’错误,提供了从错误诊断到实战解决方案的完整指南。通过动态扩容技术、单用户模式操作和LVM快照等方案,帮助管理员顺利完成根目录扩容,避免数据丢失和系统崩溃。

weixin_28702105的博客 226

JS正则replace的使用方法(案例)

一,全文属性 g 表示全文匹配 i 表示匹配时忽略大小写 m 表示多行匹配 二、()、[]、{} 的区别 ( ) 的作用是提取匹配的字符串。表达式中有几个()就会得到几个相应的匹配字符串。比如 (\s+) 表示连续空格的字符串。 [ ] 是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示字符文本要匹配英文字符和数字。 { } 一般用来表示匹配的长度,比如 \d{3} 表示匹配三个空格,\d[1,3]表示匹配1~3个空格。 三、^ 和 $ ^ 匹配一个字符串的开头,比如 (^a) 就是匹配

weixin_51109349的博客 1233

Navicat16/17数据库密码安全解析与实战解密指南

本文详细解析了Navicat 16/17版本中数据库密码的加密机制,并提供了实用的密码找回指南。通过导出连接文件获取加密密文,利用基于AES-128-CBC算法的本地HTML工具,可安全、离线地解密遗忘的密码。文章强调该方法仅适用于合法恢复自有密码,并给出了操作步骤与安全建议。

weixin_28835583的博客 457

html转义符 npm,用于Javascript regex的转义字符串

短甜functionescapeRegExp(string){returnstring.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');//$&meansthewholematchedstring}例escapeRegExp("Alloftheseshouldbeescaped:\^$*+?.()|{...

weixin_33971721的博客 615

【WRF数据准备】土地利用数据-MODIS MCD12Q1数据下载及制备

【WRF数据准备】MODIS静态地理数据下载及制备

WW、forever的博客 3412

insightface scrfd人脸检测测试

pip install mmdet 自动安装mmcv win10上可以,服务器上没成功

jacke121的专栏 4022

java正则表达式

匹配中文:[\u4e00-\u9fa5]  英文字母:[a-zA-Z]  数字:[0-9]  匹配中文,英文字母和数字及_:  ^[\u4e00-\u9fa5_a-zA-Z0-9]+$ 同时判断输入长度: [\u4e00-\u9fa5_a-zA-Z0-9_]{4,10} ^[\w\u4E00-\u9FA5\uF900-\uFA2D]*$ 1、一个正则表达式,只含有汉字、数

cqrf2006的专栏 1239

【ESP32使用MAX98357播放音频】

在物联网和智能家居领域,音频播放功能越来越受到重视。ESP32作为一款功能强大的微控制器,结合MAX98357音频放大器模块,可以实现高品质的音频播放。本文将详细介绍如何使用ESP32的I2S接口通过MAX98357进行音频播放。

vor234的博客 7524

常用正则表达式

常用正则表达式 一、校验数字的表达式 数字: ^[0-9]*$ n位的数字: ^\d{n}$ 至少n位的数字: ^\d{n,}$ m-n位的数字: ^\d{m,n}$ 零和非零开头的数字: ^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字: ^([1-9][0-9]*)+(.[0-9]{1,2})?$ 带1-2位小数的正数或负数: ...

ailo555的专栏 621

《网络安全自学教程》- 防火墙原理分析与Windows防火墙使用配置

防火墙分类及原理,Windows开启防火墙,Windows防火墙添加策略,

wangyuxiang946的博客 1万+

软考「系统规划与管理师(第2版)」通关全攻略(2026年下半年)

它考的是一个IT管理者能不能用体系化的语言,把"我们为什么要建这个系统→怎么规划→怎么管好服务→怎么合规"讲圆。所以备考的核心策略也很明确——教材建框架 → 真题磨考点 → 案例练结构 → 论文备好真实项目素材 → 机考练打字。按计划走,不贪全、不盲刷、不死背,稳稳把三科都推过45分那条线。祝你通关 🎯。

软件行业技术文化交流。 3036

js正则表达式(2)

1.正则表达式基本语法 两个特殊的符号'^'和'$'。他们的作用是分别指出一个字符串的开始和结束。 例子如下: "^The":表示所有以"The"开始的字符串("There","The cat"等); "of despair$":表示所以以"of despair"结尾的字符串; "^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了; "notice":表示

一个人的江湖 744

AUTOSAR从入门到精通-汽车电子电气架构(EEA)(二)

需求的传递并非完全是瀑布式的单向传递,而是双向的,只有被下游接受了的需求才是有效的需求,而且,下游是可以反向对上游提出需求的。当街区的设计完成之后,接下来要做的就是每栋建筑的详细设计,建筑的设计者发布的图纸中规定了房屋的主要结构、所在位置与周边环境的相互关系,以及屋中各种组件的位置与相互之间结合的关系,比如砖混结构、房屋的具体位置和朝向、卧室与客厅的相对位置与尺寸、马桶在卫生间中的位置等,还会对各种建筑材料的选取原则给出具体的标准,比如水泥的标号,钢筋的型号,各种电线的等级要求等等。

getusushu的博客 372

关于JS javaScript中字符串正则表达式使用replace()方法时的$0$1$2$3...$9的一些实践

本内容以结果为导向,来进行推断的,所以如果有错误部分请评价指出,谢谢您。 在正则表达式中,可以使用小括号进行分组,那么这个$0$1$2$3...$9相当于引用分组,但是在使用replace()方法时,输出结果却不是想象中的那样。 var str = '小括号进行分组小括号进行分组'; var reg = /(...)(....)/g; str.replace(reg, function ($1) { console.log($1); }); 本来理想中的状态就是将小括号进行分组小括号进行分组分成(小括

chengzhijun93的博客 2635

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

1、JavaScript 函数,2、JavaScript 正则表达式,3、JavaScript JSON,

函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。 实例 &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;script&gt; function myFunction() { alert("Hello World!"); } &lt;/script&gt; &lt;/head&gt; &lt;body&gt;

qq_15007601的博客 226

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JavaScript 3.2 正则表达式1

一、正则表达式 1、简单模式 简单模式是由你想直接找到的字符构成。 如:/abc/,这个模式就仅能匹配到abc. 示例 var x = 'gabcdef'; var y = 'gab cdef'; var z = 'dcab'; with(/abc/){ console.log(test(x)); console.log(test(y)); console.log(test(z));} /*输出 true false false */ 简单模式只能顺序匹配,字符串中必须包含表达式,包含的内

LetsStudy的博客 224

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Js-w3school(2020.2.5)【js正则表达式】

二十、js正则表达式 1.正则表达式是构成搜索模式的字符序列。该搜索模式可用于文本搜索和文本替换操作。 2. 使用字符串方法 在 JavaScript 中,正则表达式常用于两个字符串方法:search() 和 replace()。 search() 方法使用表达式来搜索匹配,然后返回匹配的位置。 var str = "Visit W3School"; var n = str.search(/w3s...

mus-z的博客 618

写一个检索手机号的正则表达式

在 JavaScript 中,检索手机号的正则表达式可以如下写: var pattern = /^1[3-9]\d{9}$/; 该正则表达式匹配的是大陆地区的 11 位手机号,以 1 开头,第 2 位可以是 3-9 中的任意一位。 ...

weixin_42602726的博客 413

JavaScript实现2[abc]2[e]3[df]转换为abcabceedfdfdf

第一种方法 var str="2[abc]2[e]3[df]"; str=str.match(/\d+\[[a-zA-Z]+?\]/g).reduce(function(value,item){ var arr=item.match(/(\d+)\[([a-zA-Z]+?)\]/).slice(1); return value+arr[1].repeat(Number(arr[0])); },""); console.log(str); 第二种方法 var str="2[abc]2[e]

我是小奶音啊的博客 367

正则表达式完整匹配汉字

网上一般说法是[\u4e00-\u9fa5]。这是不完整的。 基本平面 CJK Unified Ideographs(中日韩统一表意文字)区是4E00-9FFF,对应的正则是: 写法风格 正则表达式 JS [\u4E00-\u9FFF] PCRE [\x{4E00}-\x{9FFF}] …… …… CJK Unified Ideographs Extension ...

WQR1994的博客 874

javascript写3个字符串并清除空格

"字符串1","字符串2","字符串3"; var str1=str1.replace(/\s+/g,""); var str2=str2.replace(/\s+/g,""); var str3=str3.replace(/\s+/g,"");

weixin_35750953的博客 172

JS 保留小数点后面2位小数

JS 保留小数点后面2位小数 1. 最笨的办法....... [我就怎么干的.........] function get() {     var s = 22.127456 + "";     var str = s.substring(0,s.indexOf(".") + 3);     alert(str); } 2. 正则表达式效果不错 onload = fu

850

js匹配html标签 镶套,JavaScript正则表达式可匹配嵌套方括号内的任何单词?

我试图找到一种使用正则表达式的方法使方括号[]中的文本变为斜体,包括嵌套方括号,但不包括方括号本身。 到目前为止,我想出的最好的方法是:text = text.replace(/(\[+)([^\[\]]+)(]+)/g, '$1$2$3');但是在嵌套括号的情况下失败,例如:[test1] test2 ([[readonly ][optionality ][argumentType ]argum...

weixin_30575925的博客 727

3 种实现 JavaScript 模板引擎的方法

英文 |https://javascript.plainenglish.io/interviewer-can-you-implement-a-javascript-template-engine-me-crap-fcd1dd6a3889翻译 | 杨小爱小伙伴们,相信即使你是经验丰富的开发者,也未必能很快的解决这道面试题。如果您想质疑这一说法,请继续阅读下去。最近,我的好朋友南希遇到了一个让她发疯...

web前端开发 357

[JavaScript] 11.JS 偶识【正则表达式】[2]

关于【正则表达式】的认识是基于JavaScript上的,在先前的J2SE博客整理阶段,并未直接列出,经过长时间的接触和使用,不断刷新对其认识程度,方才在此时总结归纳出,不断给予自己挑战是证明自己不断向前最好的证明。 注:【两个“不断”和两个“证明”,来充实自己未来发展的道路,共勉之!】

吴士龙 8942

JS利用正则表达式去除字符串空格

// str是要去除空格的字符串 var str = ' as ddd ee 4kkk ,mm '; // 去除str所有的空格 var str1 = str.replace(/\s*/g,""); console.log(str1); // 去除str两头的空格 var str2 = str.replace(/^\s*|\s*$/g,""); console...

weixin_39357177的博客 6165
上一篇: JavaScript 3.2 正则表达式1
下一篇: JavaScript 3.3 继承与原型链
LetsStudy
博客等级 码龄9年 96粉丝 323原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值