问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

一个用js正则替换的问题

发布网友 发布时间:2022-04-25 05:04

我来回答

1个回答

热心网友 时间:2022-04-25 06:34

后向引用
正则表达式一个最重要的特性就是将匹配成功的模式的某部分进行存储供以后使用这一能力。请回想一下,对一个正则表达式模式或部分模式两边添加圆括号将导致这部分表达式存储到一个临时缓冲区中。可以使用非捕获元字符 '?:', '?=', or '?!' 来忽略对这部分正则表达式的保存。

所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储。存储子匹配的缓冲区编号从 1 开始,连续编号直至最大 99 个子表达式。每个缓冲区都可以使用 '\n' 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。

后向引用一个最简单,最有用的应用是提供了确定文字中连续出现两个相同单词的位置的能力。请看下面的句子:

Is is the cost of of gasoline going up up?
根据所写内容,上面的句子明显存在单词多次重复的问题。如果能有一种方法无需查找每个单词的重复现象就能修改该句子就好了。下面的 JScript 正则表达式使用一个子表达式就可以实现这一功能。

/\b([a-z]+) \1\b/gi
等价的 VBScript 表达式为:

"\b([a-z]+) \1\b"
在这个示例中,子表达式就是圆括号之间的每一项。所捕获的表达式包括一个或多个字母字符,即由'[a-z]+' 所指定的。该正则表达式的第二部分是对前面所捕获的子匹配的引用,也就是由附加表达式所匹配的第二次出现的单词。'\1'用来指定第一个子匹配。单词边界元字符确保只检测单独的单词。如果不这样,则诸如 "is issued" 或 "this is" 这样的短语都会被该表达式不正确地识别。

在 JScript 表达式中,正则表达式后面的全局标志 ('g') 表示该表达式将用来在输入字符串中查找尽可能多的匹配。大小写敏感性由表达式结束处的大小写敏感性标记 ('i') 指定。多行标记指定可能出现在换行符的两端的潜在匹配。对 VBScript 而言,在表达式中不能设置各种标记,但必须使用 RegExp 对象的属性来显式设置。

使用上面所示的正则表达式,下面的 JScript 代码可以使用子匹配信息,在一个文字字符串中将连续出现两次的相同单词替换为一个相同的单词:

var ss = "Is is the cost of of gasoline going up up?.\n";
var re = /\b([a-z]+) \1\b/gim; //创建正则表达式样式.
var rv = ss.replace(re,"$1"); //用一个单词替代两个单词.
最接近的等价 VBScript 代码如下:

Dim ss, re, rv
ss = "Is is the cost of of gasoline going up up?." & vbNewLine
Set re = New RegExp
re.Pattern = "\b([a-z]+) \1\b"
re.Global = True
re.IgnoreCase = True
re.MultiLine = True
rv = re.Replace(ss,"$1")
请注意在 VBScript 代码中,全局、大小写敏感性以及多行标记都是使用 RegExp 对象的适当属性来设置的。

在replace 方法中使用 $1 来引用所保存的第一个子匹配。如果有多个子匹配,则可以用 $2, $3 等继续引用。

后向引用的另一个用途是将一个通用资源指示符 (URI) 分解为组件部分。假定希望将下述的URI 分解为协议 (ftp, http, etc),域名地址以及页面/路径:

http://msdn.microsoft.com:80/scripting/default.htm
下面的正则表达式可以提供这个功能。对 JScript,为:

/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/
对 VBScript 为:

"(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)"
第一个附加子表达式是用来捕获该 web 地址的协议部分。该子表达式匹配位于一个冒号和两个正斜杠之前的任何单词。第二个附加子表达式捕获该地址的域名地址。该子表达式匹配不包括 '^'、 '/' 或 ':' 字符的任何字符序列。第三个附加子表达式捕获网站端口号码,如果指定了该端口号。该子表达式匹配后跟一个冒号的零或多个数字。最后,第四个附加子表达式捕获由该 web 地址指定的路径以及\或者页面信息。该子表达式匹配一个和多个除'#' 或空格之外的字符。

将该正则表达式应用于上面所示的 URI 后,子匹配包含下述内容:

RegExp.$1 包含 "http"

RegExp.$2 包含 "msdn.microsoft.com"

RegExp.$3 包含 ":80"

RegExp.$4 包含 "/scripting/default.htm"

--------------------------------------------------------------------------------
© 2000 Microsoft Corporation 版权所有。保留所有权利。使用规定。

自己试着去学习然后做出来,这样才能有进步。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
可以用电高压锅做蛋糕吗 蛋糕机选哪家实惠? 京东闪付开通后无法添加到applepay怎么办 二年级数学说课稿范文 苹果手机电充到80就不充了怎么回事 上有八,下有八中间有个十字花打一字 ...排名22000.能否上到广工的机械制造和自动化(卓越工程师班)_百度知 ... 把内存由DDR2升级到DDR3,是不是要设置什么东东啊。 怎样吧DDR2的内存条改成DDR3 ...的内存条是DDR2的,我想换DDR3的可以吗?该怎么换?还有该注意什么... 隔离霜不防晒呀 大数据公司中国做的好的有哪些? 杭州有没有什么比较有潜力的大数据啊、人工智能等类的公司可以推荐? 有没有能提供大数据服务的公司推荐? 夸进初中以后 作文600 记叙文 非全日制研究生可以报考博士学位吗 求一篇中考后的《致家长的一封信》成绩很差,让家长感动的作文。600字。谢谢!急 关于中考过后的作文 啥啥梳妆四字词语? 李金斗一梳黑使用视频 东施帛梳子二代与三代有什么区别? macbook air可以玩游戏吗 苹果macbook 适合玩游戏吗 快速掌控情绪的第一步是什么 作为一个成年人,如何才能掌控情绪? 请问,游戏推广工作好做吗做点什么? 情绪掌控术这本书看完后对情绪能控制吗?求方法 游戏推广工作好吗 空心菜没心会死吗? 春节的诗句图年 几度夕阳红前一句是什么 ”几度夕阳红”诗句的前一句 谁有1986年香港十大劲歌金曲金奖颁奖典礼得的下载地址,我搜不到啊,有的请告诉我。谢谢 几度夕阳红的上一句 青山依旧在,几度夕阳红的前面几句是什么? 夜阑静,问有谁共鸣 出自哪首歌的歌词啊.? 青山依旧在不见故人来的前后句 易居中国的大客户专员是干什么的 搜房网的大客户专员是做什么的 ()是非成败转头空,江山依旧在,几度夕阳红 前一句 香港十大劲歌金曲那一年谭咏麟出现在劲歌金曲颁奖典礼上 “清风伴明月,明月何时归,几度夕阳红”的下联 oppo手机的大客户专员的工作内容是什么? 几度夕阳红 接上一句, 宝马大客户专员是干嘛的 商务专员是干什么的?请说得详细点 汽车市场开发专员是什么 大客户部销售总监主要是做什么的? 一句简短的风景朋友圈是什么? 老屋给你留下了什么样的印象作文三年级