双引号替换单引号的小案例,引发的思考

字符串的替换转换,一般大家都会想到字符串的替换replace方法正则表达式的结合。

但是对于不了解的童鞋们,正则表达式仅仅在于使用,很难有人理解,我也不例外。

通过一个小案例,我们一起探讨一下它们的奥秘!

案例1:
var name = '"0", "1"';
var reg1 = /"([^"]*)"/g;
name = name.replace(reg1, "'$1'");  //'', '1'
console.log(name); //'0', '1'
//此时$1代表的就是0或1

1.replace定义和用法

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

案例1里面的$1代表正则第一个子表达式所匹配到的文本(以此类推:$1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。),这里也就是0和1.

于是这里就把正则匹配到的双引号”0“和”1“,用单引号‘0’和‘1’替换了,得到最终结果。

案例2:
var
name2 = "Doe, John"; name.replace(/(w+)s*, s*(w+)/, "$2 $1"); console.log(name2)//John Doe

从这个案例2可以清楚的看到,第一个括号和第二个括号所匹配的内容,依次用$1,$2代表,然后进行交换位置

当然replace的第二个参数也可以是回调函数,也存在参数$1等,可自行打印查看(注意写在回调里面的参数,$1,$2......分别代表母体表达式匹配的结果,第一个子体,第二个子体,依次类推)。

拿案例1来说;
var name = '"0", "1"';
name.replace(/"([^"]*)"/g, function($1, $2) {
        console.log($1, $2)//
    })
//此时的$1代表的母体正则匹配到的”0“或”1“
//$2才是第一个子体表达式匹配的0或1

1.RegExp

RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具

说一下我比较容易混的量词

n+ 匹配任何包含至少一个 n 的字符串。
n* 匹配任何包含零个或多个 n 的字符串。
n? 匹配任何包含零个或一个 n 的字符串。

n+表示:有一个n,有多个n

n*表示:没有n,有一个n,有多个n;

n?表示:没有n,有一个n;

这几个很像,这样分析不难看出n*的可能性最多,就一个案例分析一个特殊情况

var name = '"", "1"';
var reg1 = /"([^"]*)"/g;
var reg2 = /"([^"]+)"/g;
var reg3 = /"([^"]?)"/g;
name = name.replace(reg1, "'$1'");  //'', '1'
//name = name.replace(reg2, "'$1'"); //"', '1"
//name = name.replace(reg3, "'$1'");  //'', '1'
console.log(name); //'0', '1'

虽然第一个和第三个结果一样,但明显存在和一个,更不能合适所有情况


所有考虑全了,双引号里面的内容不存在,存在一个或存在多个才是我们全部的可能性存在,希望能够帮到你,虽然理解的不是很深,也很啰嗦,哈哈哈

 

 在来个案例提升一下;

如何将浮点数左边的数每三位添加逗号

//如1200000.11转成12,000,000.11
result = num && num.toString().replace(/(d)(?=(d{3})+.)/g,function($1,$2){ return $2 + ','; })
原文地址:https://www.cnblogs.com/liliy-w/p/10107040.html