Javascript中的正则表达式

JS正则表达式验证表单 我们通常写的表单中,往往要判断用户填的是否符合要求,那么可以通过js的正则式来验证。js的正则式语法可参考菜鸟教程:JS正则表达式 下面是我的表单页面: 在点击下一步的时候,可以通过JS来控制下,如果不符合要求,则不进行跳转。下面代码中的变量名都是输入框所填项的英文,应该没歧义吧,我就不展示HTML部分了,直接给出js判断。 $(document).ready(function() { ... 阅读详情

我爱正则表达式。我发现几乎没有一天我不在使用它们解决一些问题。虽然我爱他们,但是,在使用中一直感觉到有点吃力。我认为这只是因为我没有对它有一个全面的深入了解。因此,我想我会花几分钟给自己(和有兴趣的其他人)一个简短的介绍。


String的replace方法(字符替换)

在JavaScript中,每一个字符串对象有一个replace()方法。这replace()方法可心使用一个正则表达式对象作为第一个参数,可以是一个静态的字符串或一个函数作为第二个参数。当调用replace()方法时,传入一个字符串,原字符串中所有与正则匹配的字符都会被替换成这个字符串:

// -- String.replace() -------------------------------------- //
 
// Create a test string.
var value = "Hey Tricia, how's it going?";
 
// The replace() method can take a static replacement string as
// the second argument. Replace the name Tricia with the name
// Joanna.
var newValue = value.replace(
new RegExp( "\\bTricia\\b", "gi" ),
"Joanna"
);
 
// Output the new string.
document.write( newValue );

这里,我们找到所有的"Tricia"并替换成"Joanna"。当我们运行上面的代码,我们可以得到这样的结果:

Hey Joanna, how's it going?

这里传入的是一个静态的字符串,但它可以具有一些动态的特性。通过匹配模式的捕获组功能,替换字符串可以由多部分的匹配共同组成。在正则表达式模式下,每个捕获组可以在替换字符串中使用$N来标记,在这里N是捕获组在正则表达示中的索引位置。

// -- String.replace() -------------------------------------- //
 
// Create a test string.
var value = "Hey Tricia, how's it going?";
 
// The replace() method can take a static replacement string as
// the second argument. This static string can contain references
// to captured groups in the pattern. Replace the name Tricia
// with the name hottest Tricia.
var newValue = value.replace(
new RegExp( "\\b(Tricia)\\b", "gi" ),
"hottest $1"
);
 
// Output the new string.
document.write( newValue );

在这个示例中,我们用"hottest $1"来替换"Tricia"。由于$1指向第一个捕获组匹配的值,运行这段代码,我们可以得到这样的结果:

Hey hottest Tricia, how's it going?

在这里你可以看到"hottest $1" 被替换成了"hottest Tricia".

String的replace方法(函数替换)

通过传入上例中的字符串是一种很方便也节省时间的方法,但如果我们想要更多的干预替换的行为,我们可以传入一个方法体来实现。这是一个我个人很喜欢同时也经常 使用的小技巧。每次匹配规则作用于源字符串时都会执行一次这个方法.源字符中被匹配的字符及每个捕获组都会作为特有的参数传入方法内。源字符中与正则匹配的部分会被这个方法的return值替换。


// -- String.replace() -------------------------------------- //
 
// Create a test string.
var value = "Hey Tricia, how's it going?";
 
// The replace() method can take a method as the second argument.
// In this case, the return value of the method is what is
// replaced into the string. The first argument passed to this
// method is the matched pattern; each subsequent argument is a
// captured group from the pattern.
var newValue = value.replace(
new RegExp( "\\b(\\w+)'(s)\\b", "gi" ),
 
// This method will handle the replacement. In this case,
// the $1 is the \\w+ and the $2 is the s.
function( $0, $1, $2){
// Replace in "is".
return( $1 + " is" );
}
);
 
// Output the new string.
document.write( newValue );

通过上例你可以看到所有减写的is都会被替换成标准写法,我们可以得到如下结果:

Hey Tricia, how is it going?

String的match方法(非全局匹配)

JavaScript中,我们还可以使用match方法来收集被匹配的值.match方法可以生成并返回一个源字符中所有与正则匹配的值的数组(译者注:如果可以找到匹配)。

值得一说的是,在match方法里使用全局匹配标签g与否会产生不行的行为效果。

当我们未传入全局匹配的g标签时,match方法会返回一个包含一个该正则完整匹配的字符及其后仍次的子分组匹配字符的数组

// -- String.match() ---------------------------------------- //
 
// Create a test string.
var value = "aabbccddee";
 
// Get the matches in the string. When this is run WITHOUT the
// global flag, it returns the entire match, and then each
// captured group as a subsequent match index.
var matches = value.match(
new RegExp(
"/(\w)(\1)+/i",
"i"
)
);
 
// Output the array of matches.
console.log( matches );
上例的目地是为了找到一个或多个有重复字母的字符串。在这里并没有使用全局匹配g,该正则的语法解释是 \w匹配字母,\1匹配第一个子分组,既(\w)。

aabbccddee,a,a

我们可以得到这样的结果。

(译者注,该文原先的正则使用了不分配分组,并且和下文的全局匹配无法统一,为了便于理解,译者把该正则写法统一了,以便下文中对全局匹配区分)


在这里,aabbccddee即是上文提到的"该正则完整匹配的字符",而"a","a"则是"其后仍次的子分组匹配字符"

注意: 当正则表达式没有发现匹配, match会返回 null ,而不是空数组.


String的match方法(全局匹配)

当我们传入全局匹配的g标签时,match方法会返回包含所有该正则匹配的字符串的数组而不会包含任何子分组的匹配

// -- String.match() ---------------------------------------- //
 
// Create a test string.
var value = "aabbccddee";
 
// Get the matches in the string. When this is run WITH the
// global flag, it returns a single pattern match in each of the
// array indexes (regardless of capturing).
var matches = value.match(/(\w)(\1)+/ig);
 
// Output the array of matches.
console.log( matches );


当我们执行上述代码,我们可以得到:

aa,bb,cc,dd,ee

各位可以看到,每个(\w)(\1)+所匹配的字符串都会作为match方法返回的数组中的一个元素,这里不会再包含任何对子分组的匹配。


String的search方法

字符串search()方法和indexof()方法很类似,但使用正则表达式。

这个方法只需要传入一个正则表达式,执行后返回第一个匹配的索引,或-1(如果没有发现匹配)

// -- String.search() --------------------------------------- //
 
// Create a test string.
var value = "Kate, you are looking very hot!";
 
// Search for a value in the string. Returns index or -1.
console.log(value.search( new RegExp( "are", "i" ) ) +"<br />");

// Search for a value NOT in the string. Returns index or -1.
console.log(value.search( new RegExp( "fun", "i" ) ) +"<br />");

在上例中我们准备了一个能够匹配源字符串的正则及一个无法匹配的正则,运行这段代码,我们可以得到

10
-1
可以发现,are在源字符串的索引10位置,而fun无法被匹配上,返回-1

RegExp的test方法

正则表达式test()方法只会根据给定的源字符串是否能匹配正则表达式而返回true或false:

// -- RegExp.test() ----------------------------------------- //
 
// Create a test string.
var value = "Kate, you are looking very hot!";
 
// Create a testing pattern.
var pattern = new RegExp( "\\bhot\\b", "i" );
 
// Test to see if the given string matches the given expression.
// Return TRUE or FALSE.
console.log(pattern.test( value ));

当我们执行上面的代码,可以得到:

true

可以看出,该正则能够匹配给定的源字符串。 有一点需要重点提示:test方法并不需要该正则完整的匹配源字符串才行。如果你需要正则能完整的匹配源字符串才返回true,那需要在正则的前后加上^和$标记.


RegExp的exec方法

exec方法允许我们收集收集被匹配的值;但是,和String的match方法不同的是exec方法允许我们更深入每一次正则匹配的过程。exec方法可以让我们遍历每一次正则匹配的子字符串。在每一次匹配的回调事件中,我们不但可以到得被匹配的字符串的值及其索引,还可以得到每个子分组的匹配结果。

// -- RegExp.exec() ----------------------------------------- //
 
// Create a test string.
var value = "aabbccddee";
 
// Create a pattern to find the doubled characters.
var pattern = new RegExp( "((\\w)\\2)", "gi" );
 
// Use exec() to keep looping over the string to find the
// matching patterns. NOTE: Since we are using a loop, you MUST
// use the global flag "g", otherwise, this will cause an
// infinite loop to occur.
while (matches = pattern.exec( value )){
 
console.log( matches + "<br />" );
 
}

执行上面的代码,可以得到下面的结果:

aa,aa,a
bb,bb,b
cc,cc,c
dd,dd,d
ee,ee,e

上面的例子中,我们不但可以得到每个匹配的重复字符串,还可以通过子分组匹配到重复字符串中的每一个字符。


可以看出来,exec方法可以让我们得到String的match的能力同时,还具有更深入String的replace方法的能力。与此同时,exec方法,还可以更有用处:看看它是如何更新RegExp实例的http://www.bennadel.com/blog/697-Javascript-Exec-Method-For-Regular-Expression-Matching.htm


这篇文章并不是想深入JavaScript中每个正则表达式的用法,只是做一个全面的介绍。就像我上文中提到,正则表达示是极好的,我只是想有一个更全面的了解。


原文链接:

http://www.bennadel.com/blog/1742-Using-Regular-Expressions-In-Javascript-A-General-Overview-.htm

JavaScript中的正则表达式 又称规则表达式(英语:Regular Expression,在代码中常简写为、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式是一种通用的工具,在Script、、Java、等几乎所有的编程语言中都能使用;但是,不同编程语言对正则表达式语法的支持不尽相同,有的编程语言支持所有的语法,有的仅支持一个子集。本节讲到的正则表达式语法适用于。通过比较2种方法我们明显看出在对字符串进行处理时,使用正则表达式会简单许多,所以虽然正则表达式看起来像是。 阅读详情

相关推荐

基于正则表达式的JavaScript/C++语法高亮(js版)

JavaScript的语法高亮一直是个难点,因为需要语义分析以确定/是除法操作的开始还是正则表达式的开始。目前关于高亮js的语法高亮都不是很理想,尤其是syntaxhighlighter(你待会看到的代码高亮效果就是它弄的, csdn说, 就用sh了)的效果算是最差的了,根本就不高亮正则、数字等,太不敬业了。假设你写的代码是足够规范的,而且不考虑效率的话,那么你使用我这个高亮js一般不会有问题。

Wind__Fantasy的专栏 3980

[译]可以自纠正的setInterval代替方法

最近,我在做一些有关setInterval方法的尝试.对于初学者来说,setInterval是可以让你在指定的时间间隔里重复执行某段代码的方法。 比如,你可以用下面的代码创建一个每秒执行的时间间隔 setInterval(function() { console.log('I execute every second!'); }, 1000); 受JavaScript单线程机

simon4545的专栏 2818

PSCAD通过python调用自动化库的实现

带有python脚本的pscad自动化PSCAD通过python调用自动化库的实现前期准备实现 PSCAD通过python调用自动化库的实现 在网上搜了一圈没有找到,通过油管的一个视频学到了,这里分享一下。 前期准备 下载PSCAD 在官方文档中建议PSCADV4.6.1及以上版本 下载python python这里没注明哪些版本可用,博主下载了最新的3.8.2使用正常。 下载IDE py...

橙子的博客 5914

【JS】JavaScript正则表达式基础

目录一、正则表达式二、字符串使用正则表达式三、常用例子 一、正则表达式 关于正则表达式,我在另一篇博客记录过:正则表达式 二、字符串使用正则表达式 三、常用例子

小绵杨 2211

钉钉宜搭低代码开发师高级认证考试题库113题

钉钉宜搭低代码开发师(高级)考试试题题库,多次考试收集整理,判断题,单选题,多选题,排版清晰,查找方便。希望能帮助到大家!!!

qq_40811920的博客 6399

Ubuntu+Dify实战:如何让大模型知识库完美支持图片召回(附避坑指南)

本文详细介绍了在Ubuntu系统上部署Dify平台,并实现大模型知识库图片召回功能的完整实战方案。通过解析Dify处理图片的底层逻辑,重点讲解了配置Nginx代理服务器将本地图片路径转换为可公开访问URL的核心工程步骤,并提供了文档预处理、环境变量配置以及父子分段策略等高级技巧,帮助开发者构建图文并茂的AI应用,有效提升知识库的丰富性和用户体验。

c7d8e的博客 446

JS正则表达式介绍(JavaScript正则表达式)

JavaScript正则表达式是一种强大的文本处理工具,掌握其基本语法和高级技巧可以大幅提高文本处理效率。正则表达式由元字符、量词、分组等组成,通过合理组合这些元素,能够实现复杂的模式匹配需求。正确理解和使用标志(flags)可以让正则表达式匹配更精确、更高效,适应不同的文本处理需求。在实际应用中,需要注意正则表达式的可读性和性能问题,避免过于复杂的模式导致难以维护或性能下降。

Dontla的博客 1758

MongoDB启动失败(service mongod start):Failed to unlink socket file /tmp/mongodb-27017.sock Unknown error

错误日志(/var/log/mongodb/mongo.log): 2019-09-16T06:00:00.251+0000 I CONTROL [main] ***** SERVER RESTARTED ***** 2019-09-16T06:00:00.253+0000 I CONTROL [main] Automatically disabling TLS 1.0, to force-e...

deantzzz的博客 1838

【JavaScript】一文了解JS的正则表达式

详解JavaScript中正则表达式

ztK63LrD的博客 2221

Python爬虫实战:高德地图POI信息爬取(餐馆/加油站等),附选址分析技巧

高德API配置AMAP_KEY = "你的高德API Key" # 替换成自己的Key# 爬取参数CITY = "成都" # 城市DISTRICTS = ["锦江区"] # 区域,可添加多个(比如["锦江区", "武侯区"])KEYWORDS_LIST = ["川菜馆", "加油站"] # 要爬取的POI类型TYPES = {"川菜馆": "050101", # 餐饮服务→中餐→川菜馆(高德POI分类编码)"加油站": "110100" # 交通设施→加油站。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2471

LabVIEW实现TCP通信

在本节中,我们将简要探讨TCP通信的基础知识,并以工业物联网平台TLINK中的云端设备数据发布设计为例,详细阐述在互联网环境下TCP客户端应用程序设计的基本方法。

不脱发的程序猿 1964

常用js正则表达式 Javascript正则表达式实战手册

最近做了几个项目,发现正则表达式用得越来越多了。我个人的习惯是,能通过查手册获取的东西绝不死记硬背,虽然大多数技术网站都搜罗了一堆Javascript正则表达式的用法,但我还是想整理一份更有实战意义的手册。说白了就是,如果以后需要用到正则表达式,直接过来复制粘贴就行啦!我会尽量把排版做的漂亮一点,便于大家提高开发效率。前面是Javascript正则表达式的简明用法,实战内容请跳到最后一节。   ...

xh601的博客 5308

MATLAB计算各种复合干热指数,如SDHI、DHMI等

MATLAB编程实现各种复合干热指数

WW、forever的博客 5081

【JS】JavaScript正则表达式详细使用

目录1、描述字符范围 : [ ]2、选择匹配:| 在上一篇博客中,记录了js中正则表达式的简单使用:【JS】JavaScript正则表达式基础。这篇博客学习一下JavaScript中正则表达式的详细使用。 1、描述字符范围 : [ ] 在正则表达式语法中,方括号表示字符范围。在方括号中可以包含多个字符,表示匹配其中任意一个字符。如果多个字符的编码顺序是连续的,可以仅指定开头和结尾字符,省略中间字符,仅使用连字符~表示。如果在方括号内添加脱字符^前缀,还可以表示范围之外的字符。例如: [abc]:查找方括号内

小绵杨 1705

1.1、matlab:基于模板匹配的车牌识别

matlab:基于模板匹配的车牌识别

XU157303764的博客 2915

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

javascript(js)正则表达式基本用法

1.什么是正则表达式 Regular Expression使用单个字符串来描述、匹配一系列某个句法规则的字符串---按照某种规则去匹配符合条件的字符串 正则表达式应用场景 1.在IDE中使用正则表达式处理规则复杂的字符串查找、替换需求 2.在JavaScript程序设计中使用正则表达式处理字符串 3.在其他语言中 **推荐一个可视化正则表达式网站:http://regexper.com

on1y_rL的博客 633

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

js html正则解析,JavaScript中的正则表达式解析

JavaScript中的正则表达式解析更新时间:2006年07月29日 00:00:00 作者:JavaScript中的正则表达式解析正则表达式(regular expression)对象包含一个正则表达式模式(pattern)。它具有用正则表达式模式去匹配或代替一个字符串(string)中特定字符(或字符集合)的属性(properties)和方法(methods)。要为一个单独的正则表达式添...

weixin_29867767的博客 341

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【JavaWeb】JavaScript_js中的正则表达式及应用

1.在js中正则表达式的写法: var reg = /正则表达式/; 2.正则表达式中校验字符串是否符合正则规则的方法:test() if(reg.text(str)){ } 3.常用的语法: (1)X*:表示X字符出现0次或多次 (2)X?:表示X字符出现1次或0次 (3)X+:表示X字符出现1次或多次 (多次)  例如:邮箱:zhangsan@istone.com

午后红茶 552

JS(JavaScript) 数据校验 正则表达式

正则表达式是一门独立的语言,有自己的语法,用来检测指定字符串是否符合特定的规则正则表达式就是用来定义规则的,全称为Regular ExpressionJavaScript中提供了RegExp对象,表示正则表达式创建正则表达式对象的方式有两种使用字面量定义举例//a是定义的匹配规则,i是忽略大小写//通过reg的test函数进行验证使用构造函数定义举例//定义正则表达式,注意这里的双斜杠中的内容不能以变量传入,只能直接写入//a是定义的匹配规则,i是忽略大小写。

感谢阅读 3325

js正则限制字符串长度_JavaScript 正则表达式

js中正则表通常被用来检索、替换那些符合某个模式(规则)的文本,例如验证表单,过滤(替换)页面内容中的一些敏感词汇。1.1什么是正则表达式正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。1.2 正则表达式的特点灵活性、逻辑性和功能性非常的强。可以迅速地用极简单的方式达到字符串的复杂控制。对于刚接触的人来说,比较晦...

weixin_39651488的博客 1万+

深入学习javascript:js中的正则表达式

part 1:在javascript中可以处理正则表达式的有,regexp.exec,regexp.test,string.match,string.replace,string.split.而且,在javascript中正则表达必须写在一行。javascript中的正则表达式字面量包含在/ /中part 2:正则表达式标志: G 全局的(匹配多次) I 大小写不敏感 M 多行例...

A5656665656556的博客 180

【JS】JavaScript正则表达式

正则表达式 是一个描述字符模式的对象,JavaScript的RegExp类表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进行强大的模式匹配和文本检索与替换功能。JavaScript中的正则表达式用RegExp对象表示,可以使用RegExp()构造函数来创建RegExp对象,不过RegExp对象更多的是通过一种特殊的直接量语法来创建,正则表达式直接量定义为包含在一对斜线之间

Making Life Better. Making Others Better. 1367

{JS}JavaScript使用正则表达式

 正则表达式概述在前面已经涉及了一些正则表达式的用法,现在将系统地学习正则表达式的语法和用途。正则表达式主要用于进行字符串的模式匹配,例如判断一个字符串是否符合指定格式等。例如在windows下搜索文件,可以用“*”或者“?”这样的通配符。在正则表达式的语法中,有更多这样的符号用于表示一个字符串的模式,表7.1列出了所有的特殊符号,它们也被称为元字符。表7.1 正则表达式中的元字符

283

JavaScript正则表达式

JS代码 <script> // QQ号 var num = "10566"; var qq = /^[1-9]{1}([0-9]{4,9})$/; //输出true console.log(qq.test(num)); // 手机号 var num1 = "17694531646"; var phoneNumber =/^[1-9]{1}[0-9]{10}$/; //输出true console.log(phon

xiaoguilong1的博客 301

js html正则解析,JavaScript 正则表达式解析

JavaScript 正则表达式解析更新时间:2009年02月21日 03:51:20 作者:正则表达式是一个描述字符模式的对象。JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法.在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp对象,也可以用...

weixin_34416115的博客 427
上一篇: Chrome29的BUG:刷新网页后并未实现WebSocket关闭握手
下一篇: 爬虫项目常见问题及解决方案
simon4545
博客等级 码龄21年 13粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值