下面代码展示了(demo地址 https://codepen.io/peach_/pen/jONJjRY):

1.字符串replace的理解和练习和配合正则表达式的使用,

2.正则表达式学习

3.通过正则表达式实现千分位

// 字符串replace的理解和练习
//示例来源:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
/*
$1 $2 代表 分别 正则表达式 子表达式(\w+) 和 (\w+) 的值, 其中 \s 不是子表达式 而是 元字符
/(\w+)\s+(\w+)/
$1 $2 */
var newstr1 = str.replace(re, "$2, $1");
var newstr2 = str.replace(re, "$2$1"); console.log(newstr1); // Smith, John
console.log(newstr2); // SmithJohn console.log(str.replace(re, "$1 666")); //John 666 console.log(str.replace(re, "$& aaa")); //John Smith aaa name = '"a", "b"'; console.log( name.replace(/"/g, '1') ); // 1a1, 1b1
//正则意思 匹配 "开头其后不为"的多个然后在匹配一个"
console.log( name.replace(/"([^"]*)"/g, "'$1'") ); // 'a', 'b' // 在本例中,我们将把字符串中所有单词的首字母都转换为大写:
//示例来源:https://www.w3school.com.cn/jsref/jsref_replace.asp
var name2 = 'aaa bbb ccc';
/*
/\b\w+\b/g
正则表达式解析
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\w 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。 */ var uw = name2.replace(/\b\w+\b/g, function(word){
console.log(word, '这里'); //分别输出 aaa bbb ccc
return word.substring(0,1).toUpperCase()+word.substring(1);
}); console.log(uw, '首字母都转换为大写'); //Aaa Bbb Ccc /*
//示例来源:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace
将华氏温度转换为对等的摄氏温度节
下面的例子演示如何将华氏温度转换为对等的摄氏温度。华氏温度用一个数字加一个"F"来表示,这个函数将返回一个数字加"C"来表示的摄氏温度。例如,如果输入是 212F,这个函数将返回 100C。如果输入的数字是 0F,这个方法将返回 "-17.77777777777778C"。 正则表达式test检查任何数字是否以 F 结尾。华氏温度通过第二个参数p1进入函数。这个函数基于华氏温度作为字符串传递给f2c函数设置成摄氏温度。然后f2c()返回摄氏温度。这个函数与Perl的 s///e 标志相似 */ //replace 的第二个阐述为函数时 的参数说明
/* 指定一个函数作为参数节
你可以指定一个函数作为第二个参数。在这种情况下,当匹配执行后,该函数就会执行。 函数的返回值作为替换字符串。 (注意:上面提到的特殊替换参数在这里不能被使用。) 另外要注意的是,如果第一个参数是正则表达式,并且其为全局匹配模式,那么这个方法将被多次调用,每次匹配都会被调用。 下面是该函数的参数: 变量名 代表的值
match 匹配的子串。(对应于上述的$&。)
p1,p2, ...
假如replace()方法的第一个参数是一个RegExp 对象,则代表第n个括号匹配的字符串。(对应于上述的$1,$2等。)例如,如果是用 /(\a+)(\b+)/ 这个来匹配,p1 就是匹配的 \a+,p2 就是匹配的 \b+。 offset
匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 'abcd',匹配到的子字符串是 'bc',那么这个参数将会是 1) string 被匹配的原字符串。
NamedCaptureGroup 命名捕获组匹配的对象 */ function f2c(x){
/*
前提 replace 的第一个参数是 一个 正则表达式
replace 的第二个参数 如果是 一个匿名函数
第一个参数为 匹配到的 字符串
从第二个参数为 依次 是正则的 子表达式 匹配的 字符
....
倒数第二个参数为 匹配到的子字符串在原字符串中的偏移量
倒数第一个产生为 被匹配的原字符串。
*/
function convert(str, p1, offset, s){
console.log('这里是', str, p1, offset, s); // 212F 212 0 212F 这里是
return ((p1-32) * 5/9) + "C";
}
var s = String(x); //转换成字符串,与toString()的区别详见 https://www.cnblogs.com/leeke98/p/9754859.html
// (?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
//匹配 单词边界 符号.或者 零个或多个 数字 前面的 的标段是匹配零次或多次 后面紧跟着F 单词边界
var test = /(\d+(?:\.\d*)?)F\b/g; return s.replace(test, convert);
} f2c('212F')
//---------------
//分析上面 函数
function f2C(x){
/*
前提 replace 的第一个参数是 一个 正则表达式
replace 的第二个参数 如果是 一个匿名函数
第一个参数为 匹配到的 字符串
第二个参数为 是正则的 子表达式 匹配的 字符
*/
function convert(str, p1, p2, offset, s){
console.log('分析这里是', str, p1, p2, offset, s); // 212Fhhh 212 hhh 0 212Fhhh
return ((p1-32) * 5/9) + "C";
}
var s = String(x); //转换成字符串,与toString()的区别详见 https://www.cnblogs.com/leeke98/p/9754859.html
// var test = /(\d+(?:\.\d*)?)F\b/g;
var test = /(\d+(?:\.\d*)?)F(\w+)\b/g; return s.replace(test, convert);
} f2C('212Fhhh') // 正则学习地址:https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md
//在线练习地址(可将下面的正则复制进去查看匹配效果): https://regex101.com/r/IDDARt/1
// 正先行断言 练习 千分位
let divide = /\B(?=(\d{3})+\b)/g;
/*
\B 匹配的是非字符边界
\b 匹配字符边界
匹配一个非字符边界,并且其后 存在一次或多次 3位数字其后还得有个字符边界,即字符串最右边
例: '123' \B 指的就是 1和2之间 2和3之间
\b 指的是 1的左边和3的右边
*/
let strDivide = '123456789';
// console.log(divide.exec(strDivide));
console.log(strDivide.replace(divide, ',') ); //123,456,789

上面代码中:最后一个实现千分位的正则匹配效果(查看效果:代码注释中有链接地址):

字符串replace的理解和练习和配合正则表达式的使用的更多相关文章

  1. java字符串函数及理解

    Java中的字符串也是一连串的字符.但是与许多其他的计算机语言将字符串作为字符数组处理不同,Java将字符串作为String类型对象来处理.将字符串作为内置的对象处理允许Java提供十分丰富的功能特性 ...

  2. 关于字符串replace方法第二个参数探究

    网上有关replace的文章很多了,这里主要聊聊它的第二个参数.阅读本文需要对replace方法有一定了解.W3school=>replace 我们要把一段字符串中的某些指定字符替换掉,第一时间 ...

  3. 对Java中字符串的进一步理解

    字符串在程序开发中无处不在,也是用户交互所涉及到最频繁的数据类型,那么字符串不仅仅就是我们简单的理解的String str = "abc";一起来更加深入的看一下 在Java中,字 ...

  4. python字符串replace()方法

    python字符串replace()方法 >>> help(str.replace)Help on method_descriptor:replace(...)    S.repla ...

  5. python字符串replace失效问题

    python字符串replace替换无效 背景 今天想把一个列表中符合条件的元素中 替换部分字符串, 发现怎么替换,改元素还是没有改变,本以为是内存引用的问题后来发现并不然. 经查阅解决 在Pytho ...

  6. js判断字符串是否全为空(使用trim函数/正则表达式)

    我们需要判断用户输入的是否全是空格,可以使用以下方法: 方法一: 使用trim() /* 使用String.trim()函数,来判断字符串是否全为空*/ function kongge1(test) ...

  7. js正则函数match、exec、test、search、replace、split使用介绍集合,学习正则表达式的朋友可以参考下。

    match 方法 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回. stringObj.match(rgExp) 参数 stringObj 必选项.对其进行查找的 String 对 ...

  8. js 字符串 replace replaceAll

    var str = "男的女的老的少的"; alert(str.replace('的','')); 可以看到替换后的str的值为"男女的老的少的",replac ...

  9. JavaScript中String对象的match()、replace() 配合正则表达式使用

    正则表达式由来已久,查找替换功能非常强大,但模板难记复杂. JavaScript中String对象的match().replace()这2个方法都要使用正则表达式的模板.当模板内容与字符串不相匹配时, ...

随机推荐

  1. 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解

    笔记 3.SpringBoot2.x整合redis实战讲解 简介:使用springboot-starter整合reids实战 1.官网:https://docs.spring.io/spring-bo ...

  2. 真正的能理解CSS中的line-height,height与line-height

    https://blog.csdn.net/a2013126370/article/details/82786681 在最近的项目中,常常用到line-height,只是简单的理解为行高但并没有深层次 ...

  3. typeScript模块<三>

    /*模块 1 模块的的概念 2 模块导出的几种方法 1.export 导出声明 2.export 导出语句 3.export default 4.import导入模块 3 模块化封装上一讲的DB库 * ...

  4. 【转载】 clusterdata-2011-2 谷歌集群数据分析(一)

    原文地址: https://blog.csdn.net/yangss123/article/details/78298679 由于原文声明其原创文章不得允许不可转载,故这里没有转载其正文内容. --- ...

  5. 004-行为型-02-模板方法模式(Template Method)

    一.概述 定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤 1.1.适用场景 一次性实现一个算法的不变的部分,并将可变的行 ...

  6. 关于haproxy的一些属性和acl 规则

    首先是haproxy.cfg文件的基本标注 当然实际配件没有下面这个复杂,可以根据需要自行增减. global log 127.0.0.1 local1 maxconn 65000 #最大连接数 ch ...

  7. 零基础学Python_汇总贴

    https://time.geekbang.org/course/intro/98 零基础学Python-第一章 :Python介绍和安装-01.Python语言的特点 零基础学Python-第一章 ...

  8. hadoop记录-[Flink]Flink三种运行模式安装部署以及实现WordCount(转载)

    [Flink]Flink三种运行模式安装部署以及实现WordCount 前言 Flink三种运行方式:Local.Standalone.On Yarn.成功部署后分别用Scala和Java实现word ...

  9. iOS 控制输入框的字数?(textFliedView,textFlied等)

    //控制输入框的字数 - (void)textViewDidChange:(UITextView *)textView { NSInteger number = [textView.text leng ...

  10. [转载] HashMap的工作原理-hashcode和equals的区别

    目录 前言 为什么需要使用Hashcode,可以从Java集合的常用需求来描述: 更深入的介绍 先来些简单的问题 HashMap的0.75负载因子 总结 我在网上看到的这篇文章,介绍的很不错,但是我看 ...