掐头去尾-利用正则表达式的匹配顺序
首先推荐一个在线测试正则表达式的网址:http://tool.oschina.net/regex
本文测试环境基于HTML5和JavaScript(JS)
使用正则表达式处理一个字符串时,如果只匹配一个值并将所有匹配替换成另一个值是比较简单的。例如:
// 目标字符串 var s = '"""asd !@#$%^&*()_+{}|":?><./;\][=-~` """ ff"" "V "ere " " rer"'; // 匹配其中所有的 " var r = /"/g;// 将其替换成 T var ss = s.replace(r, 'T');// 结果为 TTTasd !@#$%^&*()_+{}|T:?><./;\][=-~` TTT ffTT TV Tere T T rerT alert(ss);
但是如果想不改变字符串开始和结束的“ " ”,只将中间的“ " ” 进行double。
一般处理方法可以分三步,第一步掐头,第二步去尾,第三步与上文类似即可。
如果想用一步就实现目标,就必须将字符串掐头去尾同时匹配并替换。正向思路是:
不能匹配开头的若干个“ " ”,且不能匹配结尾的若干个“ " ”,在此基础上,匹配所有的“ " ”并替换成自身的两倍。
基于这个思路我没找到结果。于是我利用正则中的子表达式概念,进行反向思路:
匹配开头的若干个“ " ”作为子表达式1,匹配结尾的若干个“ " ”作为子表达式2,匹配所有的“ " ”作为子表达式3
替换时,将子表达式1和2替换成自身,所以等同没有替换。将子表达式3替换两次。
这样就能达到掐头去尾匹配中间的目的。代码如下:
// 目标字符串 var s = '"""asd !@#$%^&*()_+{}|":?><./;\][=-~` """ ff"" "V "ere " " rer"'; // 匹配其中所有的 " var r = /(^"+)|("+$)|("+)/g;// 将其替换成 T var ss = s.replace(r, '$1$3$3$2');// 结果为 """asd !@#$%^&*()_+{}|"":?><./;\][=-~` """""" ff"""" ""V ""ere "" "" rer" alert(ss);
注意,这里(^"+)|("+$)|("+) 分别按顺序代表:条件一 是不是开头的若干个“ " ”;条件二 是不是结尾的若干个“ " ”;条件三,是不是若干个“ " ”。匹配的过程中,开头的“ " ”会被记录为$1 结尾的不满足条件一,但会被记录为$2 其它的不满足条件一,二;才会被记录为$3。这样替换时才不会出错。
如果颠倒顺序为("+)|(^"+)|("+$) 所有的“ " ”都会记录为$1 后面两种均失效。
由此可见,正则表达式中,匹配的顺序也是很重要的。
掐头去尾-利用正则表达式的匹配顺序相关推荐
- iOS数据搜索技巧之【利用正则表达式进行匹配查找数据 】1、使用正则表达式对聊天记录的关键词进行监控 2、NSPredicate在正则表达式的应用
文章目录 引言 I.[使用正则表达式对聊天记录的关键词进行监控] II iOS Predicate Format String Syntax [NSPredicate在正则表达式的应用] III 知识 ...
- 正则匹配url android,Android利用正则表达式如何匹配URL
在Android项目中遇到一个问题,需求是需要获取浏览器分享出来的内容中的URL. 正常情况下分享出来的URL信息是包含在Bundle的intent.EXTRA_TEXT字段中的,而Tittle信息一 ...
- C#后台利用正则表达式查找匹配字符
/// <summary> /// 发送短信 系统固化短信 /// </summary> /// <param name= ...
- java正则表达式匹配数字范围_在java中怎么利用正则表达式匹配数字
在java中怎么利用正则表达式匹配数字 发布时间:2020-12-03 17:47:12 来源:亿速云 阅读:58 作者:Leah 在java中怎么利用正则表达式匹配数字?针对这个问题,这篇文章详细介 ...
- 【超详总结/理解:正则表达式】特点/元字符/正则表达式中的标志位-flag/RegExp/重复操作与后向引用/匹配模式/表达邮箱/正则表达式对象的方法/利用正则表达式限制网页表单里的文本框输入内容
文章目录 正则表达式: 正则表达式的用途 正则表达式的组成-元字符 正则表达式的特点 正则表达式中的标志位-flag JavaScript中的正则表达式解析 RegExp 定义 RegExp RegE ...
- php省市区筛选,PHP利用正则表达式匹配省市区
这次给大家带来PHP利用正则表达式匹配省市区,PHP利用正则表达式匹配省市区的注意事项有哪些,下面就是实战案例,一起来看一下.preg_match('/(.*?(省|自治区|北京市|天津市))+(.* ...
- excel中用正则匹配_excel 利用正则表达式匹配工作表中的数据
excel 利用正则表达式匹配工作表中的数据 sheet1中A列放需要匹配的数据 sheet2中A列放正则表达式,可以是多个,但至少一个 匹配到了则在sheet1中C列对应行显示相关标记内容,比如本案 ...
- python正则匹配特殊字符_python 利用正则表达式提取特殊信息
1.删除字符串中的 Python注释 案例: import re time = "2020-01-01 # 这是一个日期" num = re.sub(r'#.*$', " ...
- 利用正则表达式匹配标点问题
做了一个任务,将每个描述中除了中文,拼音和数字中的其他符号找出来.查找资料后发现利用正则表达式做这个问题 我写了一个方法和测试的例子如下: package com.temaiba;import jav ...
最新文章
- Matlab与线性代数 -- 零矩阵
- Apache Server和JMeter调试
- 【FLink】FLink学习遇到的好文章
- 使用DevExpress的WebChartControl控件绘制图表(柱状图、折线图、饼图)
- .net环境下如何使用MySql数据库
- RHEL7.X安装12.2RAC时root.sh错误CLSRSC-400的解决方案
- linux音频alsa驱动分析之一(over-view)
- 当贝显示服务器生病,【当贝市场】电视盒子卡顿的三大原因
- 计算机编码器的工作原理,优先级编码器74LS148的电路结构、工作原理及使用方法...
- android手机导入iphone,安卓手机文件怎么传到苹果手机
- 2020 年高中数学联赛试题及解析
- identity和assigned 的区别
- oracle测试实用SQL语句
- JAVA 字符串数组按照ACCII码表排序
- 刘盈盈计算机科学与技术,关于成立乐清市中小学幼儿园新教师专业发展指导师团队的通知...
- 一文详解脏读、不可重复读、幻读
- 用指针实现将字符串2合并在字符串1后面
- LK光流金字塔算法原理及C++实现
- 511遇见易语言程序集模块和类模块的区别
- 一个用Dijkstra算法实现的路由算法的java程序——9 图信息文件示例
热门文章
- CMake windows下代理设置
- 2019网易笔试(4-7题)
- java之空指针异常处理
- SPSS Modeler 建模前准备—数据平衡与特征选择(指南 第十一章)
- 【转自杨建荣博客】通过执行计划中的CONCATENATION分析sql问题
- 通过快递鸟如何接入圆通速递电子面单
- 论文笔记—ITS+假名管理—ASPA: Advanced Strong Pseudonym based Authentication in Intelligent Transport System
- HDFS 系列二:HFDS 命令行操作
- ipp协议 服务器,IPP远程服务
- Git:真实 merge