浅析正则表达式模式匹配的String方法
在JavaScript代码中使用正则表达式进行模式匹配经常会用到String对象和RegExp对象的一些方法,例如replace、match、search等方法,以下是对一些方法使用的总结。
String对象中支持正则表达式有4种方法,分别是:search、replace、match、split
str.search(regexp)
定义:search()方法将在字符串str中检索与表达式regexp相匹配的字串,并且返回第一个匹配字串的第一个字符的位置。如果没有找到任何匹配的字串,则返回-1。
例如:
var str = "Javascript";
str.search(/script/); // 返回 script 中s的位置为 4
str.search(/j/i); // 设置正则表达是标识i:忽略大小写,则匹配到J,返回位置0
但是,search()方法不支持全局搜索,因为会忽略正则表达式参数的标识g,并且也忽略了regexp的lastIndex属性,总是从字符串的开始位置进行检索,所以它会总是返回str的第一个匹配的位置。
例如:
var str = "javascript is cool";
str.search(/s/g); // 返回 javascript 中的s位置4,不会继续检索s
str.replace(regexp, replacement)
定义:replace()方法是执行查找并替换的操作。它将正则表达式regexp匹配到的字串,然后用replacement的字符串替换掉字串,如果有全局标识g,则替换全部匹配的字串,否则只替换第一个匹配字串。
replace方法应该是比较常用的一个方法,在字符串替换操作中非常有用的。例如:
1、简单替换
var str = "javascript";
str.replace(/javascript/,'JavaScript'); // 将字符串javascript替换为JavaScript
2、全局替换
// 使用全局表示g进行全局替换
var str = "javascript";
str.replace(/a/g, 'b'); // 将所有的字母a替换为字母b,返回 jbvbscript
3、使用replacement中的特殊字符替换,在replacement中$字符有特殊的意义,具体说明如下表格:
| 字符 | 替换文本 |
|---|---|
| $1、$2、...、$99 | 与regexp中的第1个到99 个子表达式相匹配的文本 |
| $& | 与regexp相匹配的字串 |
| $` | 位于匹配子串左侧的文本 |
| $' | 位于匹配子串右侧的文本 |
| $$ | 直接量符号 |
来看下例子:
//1、用子表达式替换:$1、$2等
var str = "javascript";
str.replace(/(java)(script)/,'$2$1');
// 表达式中()就是一个子表达式,$1对应是第一个表达式的内容,即java,$2为script,所以替换结果为:scriptjava
//2、$& 为正值表达式匹配的字串
var str = "javascript";
str.replace(/java/,'$&-');
// 正则表达式通过直接量java来匹配,匹配结果为java,则 $&的值为java,然后用字符串$&-来替换匹配的字串,结果为java-script
// 3、 $` $' $$
var str = "javascript";
str.replace(/ava/,"$`"); // $`为匹配子串ava的左侧文本,则为j,则替换后ava的结果为:jjscript
str.replace(/ava/,"$'"); // $'为匹配子串ava的右侧文本,则为script,则替换ava的结果为:jscriptscript
str.replace(/ava/,"$$"); // $$为直接量符号,即插入一个$符号,替换结果为:j$script
4、使用replacement作为函数替换
replace的参数replacement可以是函数而不是字符串,每个匹配都会调用该函数,它返回的字符串将作为替换的文本使用。该函数的第一个参数是整个匹配模式的字符串,接下来的参数是与模式中的子表达式匹配的字符串,可以有0个或多个参数。接下来的参数是一个整数,声明了匹配在str中出现的位置。最后的参数是str自身。
来看个例子:
// match 为匹配整个字符串,即:'abc12345#$*%'
// p1 为第一个子表达式,([^\d]*),匹配0个或多个非数字的字符,即:abc
// p2 为第二个子表达式,(\d*),匹配0个或多个的数字,即:12345
// p3 为第三个子表达式,([^\w]*),匹配0个或匹配任何非单词字符。等价于 '[^A-Za-z0-9_]',即 #$*%
// offset 为模式匹配出现的位置,从第一个字符已经匹配成功,则位置为0
// string为字符串本身,即 abc12345#$*%
function replacer(match, p1, p2, p3, offset, string) {
return [p1, p2, p3].join(' - ');
}
var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
// 替换结果为:abc - 12345 - #$*%
str.match(regexp)
定义:match()方法是最常用的String正则表达式方法。它唯一的参数就是一个正则表达式或者通过RegExp()构造函数来创建正则表达式,返回值是包含了匹配结果的数组。
match()方法中的regexp正则表达式一般又分为两种情况:有设置全局标志g和没有设置全局标志g
1、有设置全局标志
如果设置了全局标志g,则返回的数组包含的就是出现在字符串的所有匹配结果,例如:
// 全局匹配
var str = "1 plus 2 equals 3";
str.match(/\d/g); // 匹配字符串中出现的所有数字,并返回一个数组: [1,2,3]
2、没有设置全局标志
如果没有设置全局标志,则就不是全局性的检索,只是检索第一个匹配。这种情况下,match()方法匹配的结果也是返回一个数组,数组的第一个元素就是匹配的字符串,而余下的元素则是正则表达式中用括号括起来的子表达式。来看个例子:
// 非全局匹配
var str = "visit my blog at http://www.example.com";
str.match(/(\w+):\/\/([\w.]+)/); // 返回结果:["http://www.example.com", "http", "www.example.com"]
// 正则表达式匹配的结果为:http://www.example.com
// 第一个子表达式 (\w+)匹配结果:http
// 第二个子表达式 ([\w.])匹配结果: www.example.com
str.split(delimiter, limit)
定义:split()方法可以把调用它的字符串分解为一个字串数组,使用的分隔符是它的参数。
参数:
delimiter:字符串或者正则表达式,从该参数指定的地方分割字符串。
limit:指定返回数组的最大长度,如果没有设置该参数,则整个字符串都会被分割。
例如:
//1、 只传一个参数,默认分割整个字符串
var str ="a,b,c,d,e";
str.split(','); // 返回分割的字符串数组:["a", "b", "c", "d", "e"]
//2、传入两个参数
var str ="a,b,c,d,e";
str.split(',',3); //指定限定长度,则返回对应的数组:["a", "b", "c"]
//3、使用正则表达式匹配,不包含分割字符串
var str = "aa44bb55cc66dd";
str.split(/\d+/); //通过匹配数字进行分割字符串,但不包含分割的字符串,则返回的结果为:["aa","bb","cc","dd"];
//4、使用正则表达式匹配,包含分割字符串
var str = "aa44bb55cc66dd";
str.split(/(\d+)/); //通过匹配数字进行分割字符串,且分割的字符串是包含在子表达式中,则返回的结果为:["aa", "44", "bb", "55", "cc", "66", "dd"]
以上。
浅析正则表达式模式匹配的String方法的更多相关文章
- 浅析正则表达式模式匹配的 String 方法
在JavaScript代码中使用正则表达式进行模式匹配经常会用到String对象和RegExp对象的一些方法,例如replace.match.search等方法,以下是对一些方法使用的总结. Stri ...
- JavaScript学习笔记-用于模式匹配的String方法
用于模式匹配的String方法: String支持4种使用正则表达式的方法: seach()用于检索,参数是一个正则表达式,返回第一个与之匹配的子串的位置,找不到则返回-1,如 ...
- 用于模式匹配的String方法
String支持四种使用正则表达式的方法. 1.search()返回第一个与之匹配的子串的起始位置,找不到返回-1.search()参数是一个正则表达式,如果参数不是正则表达式,则会先通过RegExp ...
- 用于模式匹配的String方法和RegExp方法
上一节总结了创建正则表达式的语法,这一篇笔者总结了用于模式匹配的String四个方法:search().replace().match().split()以及用于模式匹配的RegExp两个方法exec ...
- python字符串(string)方法整理
python中字符串对象提供了很多方法来操作字符串,功能相当丰富. print(dir(str)) [..........'capitalize', 'casefold', 'center', 'co ...
- Ruby字符串(2):String方法详细整理
String方法整理 官方手册 类方法 new new(str="") → new_str new(str="", encoding: enc) → new_s ...
- 在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性:
在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性: var s = new MyString("hello"); s ...
- 【Java】Java中常用的String方法
本文转载于:java中常用的String方法 1 length()字符串的长度 String a = "Hello Word!"; System.out.println(a.len ...
- 用来生成get set string 方法
https://projectlombok.org/ 主要是用来生成get set string 方法等等 原理是注解
随机推荐
- Javascript定时器(二)——setTimeout与setInterval
一.解释说明 1.概述 setTimeout:在指定的延迟时间之后调用一个函数或者执行一个代码片段 setInterval:周期性地调用一个函数(function)或者执行一段代码. 2.语法 set ...
- angular项目总结——angular + browserify + gulp + bower + less 架构分享
一眨眼,快三个月没有写博客了.一直在为自己没有写博客而懊恼,忙过这段时间,好好总结一下. 新项目主要是自己一个人在写,先搭建了一个初步的架构,用了我并不熟悉的angular,这个过程中,慢慢也熟悉了a ...
- WebStorm 9 自动编译 LESS 产出 CSS 和 source maps
1.双击桌面Chrome图标,打开Chrome,按键盘“F12”键,打开开发工具界面,点击其右上角的“设置”按钮,勾选“Enable JavaScript source maps” 及“Enable ...
- SWFUpload简介及中文参考手册(share)
SWFUpload SWFUpload 版本 2 概览 (Overview) 入门( Getting Started) js对象 (SWFUpload JavaScript Object) 构造器(C ...
- 结合 CSS3 & Canvas 模拟人行走的效果
HTML5 和 CSS3 技术给 Web 带来了新的利器,点燃了 Web 开发人员的激情.所谓只有想不到,没有做不到,的确如此.下面给大家分享一个结合 CSS3 & Canvas 模拟人行走的 ...
- installshield生成时提示6003错误的一种可能
因为项目需要,2014年写过的一个老项目需要重新打包.开发电脑换了,原来开发的系统是win7,现在已经升到了win10.而且原来使用installshield limited 2013开发的打包项目已 ...
- SQL Server安全(6/11):执行上下文与代码签名(Execution Context and Code Signing)
在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...
- Laravel5设计json api时候的一些道道
对于返回数据格式没规整的问题 在开发api的时候,这个问题是和客户端交涉最多的问题,比如一个user结构,返回的字段原本是个user_name的,它应该是string类型.但是呢,由于数据库设计这个字 ...
- 在后台代码中动态生成pivot项并设置EventTrigger和Action的绑定
最近在做今日头条WP的过程中,遇到需要动态生成Pivot项的问题.第一个版本是把几个频道写死在xaml里了,事件绑定也写在xaml里,每个频道绑定一个ObservableCollection<A ...
- 在Windows Phone 8中使用Live Connect并保持登陆状态
Live Connect可以让各种客户端访问Live账号.获取好友列表.访问One Drive的文件等,官方地址在此:http://msdn.microsoft.com/zh-cn/live/ff51 ...