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

下面代码展示了(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

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

原文地址:https://www.cnblogs.com/taohuaya/p/11595118.html

时间: 2024-10-29 16:43:16

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

static关键字以及字符串常量的理解

一.作用域.链接属性以及存储类型: 1.      作用域:常见作用域有代码块.文件.函数以及原型作用域(只适用于在函数原型中声明的参数名). 2.      链接属性: a)        链接可以将多个目标文件链接生成最后的目标文件.链接属性则是决定如何处理在不同文件中出现的标识符. b)        链接属性总共有三种:external(外部).internal(内部)以及none(无).默认情况下标识符一般是外部或者无属性,但是,通过static关键字,则可以改变标识符的属性,将外部属

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

字符串在程序开发中无处不在,也是用户交互所涉及到最频繁的数据类型,那么字符串不仅仅就是我们简单的理解的String str = "abc";一起来更加深入的看一下 在Java中,字符串被作为String类型的对象处理,和基本数据类型不同,字符串可以直接使用各种字符串对象的方法,而基本数据类型不行,String类位于java.lang包中,默认情况下该包会被自动的导入所有的应用程序 String对象创建后不能被更改,是不可变的,我们重新赋值并不是修改了对象所引用的内存空间的数据,而是创建

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

我们需要判断用户输入的是否全是空格,可以使用以下方法: 方法一: 使用trim() /* 使用String.trim()函数,来判断字符串是否全为空*/ function kongge1(test) { let str = test.trim(); if (str.length == 0) { console.log('字符串全是空格'); } else { console.log('输入的字符串为:' + test); } } 如果 trim() 不存在,可以在所有代码前执行下面代码 /* 给

sed配合正则表达式应用

题目:要求用sed将/et/passwd的每一行的第一个数和最后一个单词交换位置 [[email protected] etc]# sed -n '1p' passwd root:x:0:0:root:/root:/bin/bash 一.分析:sed替换配合正则表达式将会发挥最佳效果.下面来分析匹配特点: 因为passwd文件每一行的特点都是一样的,所以先提取第一列观察,题目要求将第一个数字和最后一个单词替换,所以整行至少会被分隔成4段,用sed替换()后向引用\1与\4交换位置即可. 特点分析

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

正则表达式由来已久,查找替换功能非常强大,但模板难记复杂. JavaScript中String对象的match().replace()这2个方法都要使用正则表达式的模板.当模板内容与字符串不相匹配时,match()返回null,replace()返回原字符串. 正则表达式的模板对象 //标准写法 regexp = new RegExp(pattern[, flag]); pattern: 模板的用法是关键,也是本章的主要内容. flag: "i"(ignore)."g&quo

js中替换字符串(replace方法最简单的应用)

replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正则表达式对象(RegExp)也可以是字符串(string),replaceText是替代查找到的字符串. 首先获取时间控件的值:"2017-06-12"  接口参数需要时间格式为:"2017.06.17"  此时.replace("-",".")只是把第一个&

js 替换字符串 replace函数运用

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title&

【前端学习】字符串replace使用

String对象的replace方法包含两个参数,第一个参数表示执行匹配的正则表达式,也可以传递字符串,第二个参数表示代替匹配的子字符串. var b = s.replace("str1","str2"): 与search和match方法不同,replace方法不会吧字符串转换为正则表达式对象,而是以字符串直接量的文本模式尽心匹配.第二个参数可以是替换文本,或者是生成替换文本的函数,将返回值作为替换文本. replace方法同时执行查找和替换两个操作.该方法将在字符

深入理解与使用keep-alive(配合router-view缓存整个路由页面)

在搭建 vue 项目时,有某些组件没必要多次渲染,所以需要将组件在内存中进行'持久化',此时 <keep-alive> 便可以派上用场了. <keep-alive> 可以使被包含的组件状态维持不变,即便是组件切换了,其内的状态依旧维持在内存之中.在下一次显示时,也不会重现渲染. PS:<keep-alive> 与 <transition>相似,只是一个抽象组件,它不会在DOM树中渲染(真实或者虚拟都不会),也不在父组件链中存在,比如:你永远在 this.$p