regexxx
var test={
msg:{
"name":"name","value":"value"
}
}
var str=JSON.stringify(test);
//var testJson=JSON.parse(str);
//console.log(testJson)
var res = str.replace(/\\'/g, "aaa");
console.log(res);
name = '"a", "1b"';
name.replace(/"([^"]*)"/g, "'$1'");
console.log(name)
/* ①.replace(new RegExp(②,"g") ,③); */
var ch = "变量";
var reg = "/"+ch+"/g";
var str = "这是一个变量,这是一个变量";
var val = str.replace(eval(reg),"替换");
//alert(val);
var ch = "'";
var reg = "/"+ch+"/g";
var str ="{'msg':{'name':'name','value':'value'}}";
var val = str.replace(eval(reg),'\\\\"');
console.log(val)
https://segmentfault.com/a/1190000003497780
用法介绍
注:pattern 为RegExp的实例, str 为String的实例
| 用法 | 说明 | 返回值 |
|---|---|---|
pattern.test(str) |
判断str是否包含匹配结果 |
包含返回true,不包含返回false。 |
pattern.exec(str) |
根据pattern对str进行正则匹配 |
返回匹配结果数组,如匹配不到返回null |
str.match(pattern) |
根据pattern对str进行正则匹配 |
返回匹配结果数组,如匹配不到返回null |
str.replace(pattern, replacement) |
根据pattern进行正则匹配,把匹配结果替换为replacement |
一个新的字符串 |
RegExp对象方法
test()
字符串的test方法,比较常用在判断语句中,最简单的RegExp方法了,用于检测一个字符串是否匹配某个模式:
RegExpObject.test(string)
如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false:
/\d/.test('asdf2') // --true 检测字符串`'asdf2'`中是否函数数字
exec()
exec()方法功能非常强大,它是一个通用的方法方法,用于比较复杂的模式匹配或者是说你为你提供更多的信息:
RegExpObject.exec(string)
如果在string中找到了匹配的文本,则返回一个包含这些文本的数组,否侧返回null。这里有几个注意的地方:
返回的数组的第一个元素是与整个正则匹配的文本
然后数组的第二个元素是与整个正则的第一个子表达式(分组)相匹配的文本
数组的第三个元素整个正则的第二个子表达式(分组)相匹配的文本,以此类推。```
var result = /(\d+)-(\w+)/.exec('12-ab');
console.log(result) // --> ["12-ab", "12", "ab", index: 0, input: "12-ab"]
//为什么上面返回的“数组”是那么奇怪,按照[w3school][2]的说法就是:exec() 都会把完整的细节添加到它返回的数组中,这里的细节指的就是index和input
``` 整个正则表达式匹配的文本:`"12-ab"`
第一个子表达式匹配的文本:`"12"`
第二个子表达式匹配的文本:`"ab"`
从上面返回的数组结果可知,数组添加了两个额外的属性,分别是:
index, inputindex:匹配文本的第一个字符的位置.input:顾名思义,就是指输入的整体的文本了.```
console.log(result.index) // --> 0
console.log(result.input) // --> '12-ab'
```
执行exec函数时,尽管是全局匹配的正则表达式,但是exec方法只对指定的字符串进行一次匹配,
获取字符串中第一个与正则表达式想匹配的内容,并且将匹配内容和子匹配的结果存储到返回的数组中,
例如:/\d/g.exec('a22'),返回的结果和上面的结果一样:["2"]/\d/g.exec('a22') // -->["2"]
深入了解 exec()
深入前看看RegExp的实例有哪些属性:
global:布尔值,表示是否设置了g标志ignoreCase:布尔值,表示是否设置了i标志lastIndex:搜索下一个匹配项时开始的位置,从0开始multiline:布尔值,表示是否设置了m标志source:正则表达式的字符串表示
这里稍微陌生一点的就是lastIndex属性了,因为我们不会显示的需要用到它。但它还是挺重要的:
例1:非全局匹配
var reg = /\d/;
//第一次匹配
console.log(reg.exec('a123'));
console.log(reg.lastIndex);
//输出
["1"]
0
第二次匹配
console.log(reg.exec('a123'));
console.log(reg.lastIndex);
//输出
["1"]
0
结论:
同一正则表达式,在非全局匹配模式下,每次实例的
lastIndex属性的值总是不变的(为第一次找到匹配文本所在的位置,上面为0 );每次的匹配查找都是将
lastIndex作为起始位置的
例2:全局匹配
var reg = /\d/g;
//第一次匹配
console.log(reg.exec('a123'));
console.log(reg.lastIndex);
//输出
["1"]
2
第二次匹配
console.log(reg.exec('a123'));
console.log(reg.lastIndex);
//输出
["2"]
3
第三次匹配
console.log(reg.exec('a123'));
console.log(reg.lastIndex);
//输出
["3"]
4
第四匹配
console.log(reg.exec('a123'));
console.log(reg.lastIndex);
//输出
null
0
结论:
同一正则表达式,在全局匹配模式下,每次实例的
lastIndex属性的值为匹配文本最后一个字符的下一个位置,上面例子中第一次匹配的时候最后一个字符位置为1,则下一个位置为:2当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
那当要获取全局匹配的全部匹配项时,可以通过循环来获取:
var reg = /\d/g,
result = [],
crt;
while((crt = reg.exec('a123')) !== null){
result = result.concat(crt)
};
result; //["1", "2", "3"]
String对象方法
1. match()
match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。在一定程度上它与上面的exec()有些相似,看一下吧:
例1:非全局匹配
var a = 'aaaa'.match(/\w/);
console.log(a); // ["a", index: 0, input: "aaaa"]
可以看到,和exec()一样,在数组中返回了index 和 input属性。
例2:全局匹配
var a = 'aaaa'.match(/\w/g);
console.log(a); // ["a", "a", "a", "a"]
全局匹配就和exec方法有很大的不同了,他直接返回了所有符合匹配的子字符串的数组,另外,index和input属性也不在其中了,所以这个方法效率可能会高一些,但是如果你需要更多的信息,则用exec()吧
2. replace()
这也是一个比较灵活常用的方法,它用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
这个方法接收两个必须的参数:
pattern:这个参数可以是字符串或是RegExp对象replacement:替换匹配项的字符串或处理函数的返回值
返回结果:
当未找到匹配项的时候,返回原始字符串。
'aaaa'.replace('bbb', 'b') //"aaaa"
当pattern为字符串或者为非全局的RegExp对象的时候,只替换找到的第一项匹配项。
'aaaa'.replace('a', 'b') //"baaa"
'aaaa'.replace(/\w/, 'b') //"baaa"
当pattern为全局的RegExp对象的时候,替换每一项匹配项。
'aaaa'.replace(/\w/g, 'b') //"bbbb"
replacement:为函数时:
'aaaa'.replace(/\w/g, function() {
return 'b';
}); // "bbbb"
'aaaa'.replace(/\w/g, function(value) {
return value.toUpperCase();
}); // "AAAA"
结论:
函数的返回值将作为替换字符串
函数的第一个参数的值是每一个匹配项,当然还有第二个参数,它的值是每个匹配项在原始字符串的中位置,从0开始
特殊的 $:
replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。
| 字符 | 替换文本 |
|---|---|
| 1、2、...、$99 | 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。 |
| $& | 与 regexp 相匹配的子串 |
| $` | 位于匹配子串左侧的文本 |
| $' | 位于匹配子串右侧的文本 |
| $$ | 直接量符号 |
来一发:
//第一种情况:
'aa11AA'.replace(/([a-z]+)(\d+)([A-Z]+)/g, '$1'); // "aa"
'aa11AA'.replace(/([a-z]+)(\d+)([A-Z]+)/g, '$2'); // "11"
'aa11AA'.replace(/([a-z]+)(\d+)([A-Z]+)/g, '$3'); // "AA"
//猜想 如果是 $4 回事什么呢? undefined ?
'aa11AA'.replace(/([a-z]+)(\d+)([A-Z]+)/g, '$4'); // "$4"
//所以,要是没有该子项,则当成普通字符串处理了
//第二种情况:
'aa11AA'.replace(/([a-z]+)(\d+)([A-Z]+)/g, '$&'); //"aa11AA"
//第三种情况:
'aa11AA'.replace(/(\d+)/g, '$`'); //"aaaaAA"
//第四种情况:
'aa11AA'.replace(/(\d+)/g, "$'"); //"aaAAAA"
//第五种情况:
'aa11AA'.replace(/(\d+)/g, '$$'); //"aa$AA"
regexxx的更多相关文章
随机推荐
- Boost学习笔记(二) 时间与日期
timer库概述 timer库包含三个组件:分别是计时器类timer.progress_timer和进度指示类progress_display timer 主要作用是计时,精确度是毫秒级.下面是一个简 ...
- 框架整合----------Hibernate、spring整合
说到整合框架,其实也就是环境的搭建了,首先我们要导包,这里连接数据库我们用到了spring容器,我们用连接池来进行数据库的连接,我们需要导入c3p0和jdbc的jar包,其余的就是spring和Hib ...
- EL表达式语言总结
EL介绍 Expressive Language, JSP2.0引入,简化jsp开发中对对象的引用. 基本语法 ${表达式} 常见用法 根据其访问对象,可大体分成三类:访问数据及其各种表达式,访问EL ...
- this 的值到底是什么?
你可能遇到过这样的 JS 面试题: var obj = { foo: function(){ console.log(this) } } var bar = obj.foo obj.foo() // ...
- 【树莓派】树莓派使用4G模块上网
想了解一下树莓派通过4G网络模块通信如何实现,看到这篇文章(http://www.lxway.com/95811506.htm),准备接下来有机会实践一下,先留存学习: 一.4G Luci配置 1. ...
- JAVA 1.7 流程控制语句 续
1. Java中的循环控制语句一共有3种,分别是while,do… while以及for循环.2. while循环,形式为:while(布尔表达式){//待执行的代码}3. do…while循环,新式 ...
- virtualbox虚拟机中的centos与macos共享文件夹
开发中需要用到linux环境,所以使用共享模式开发.通过samba服务器来实现. 环境: 虚拟机 virtualbox 虚拟系统 centos 6.6 本机 macos 192.168.1.102 ...
- API -- java.lang.Integer
java.lang Class Integer static Integer valueOf(int i) Returns an Integer instance representing the s ...
- yii2-basic后台管理功能开发之五:用户权限的控制
需求:后台有两种权限+管理员+用户 区别:可以访问的页面不同 解决方法:用户表添加role字段,使用到的是yii2 存取控制过滤器(ACF)方法. >1在web.php中配置授权的类,有两种,我 ...
- VPN安装后报错:Reason442 & Error56
VPN安装后一直报错,同样的32位安装包别人安装是正常,自己安装就不正常了,考虑到是自己电脑配置的问题. 经过一番努力,解决了问题,下面就本次解决过程做一个小小的总结. (1)确保VPN Servic ...