JavaScript(JS) 正则表达式分组匹配提取替换字符串(回调函数)

JavaScript(JS)中使用正则表达式可以实现匹配到的字符串进行提取和替换,并且可以每次匹配执行一个回调函数进行处理,本文主要介绍JavaScript(JS) 正则表达式分组匹配提取替换字符串的方法,以及相关的示例代码。

1、JavaScript(JS)正则表达式

参考文档:JavaScript(JS) 正则表达式 和 RegExp 对象

2、stringObject.replace(regexp/substr,replacement)

1)regexp/substr参数

子字符串或要替换的模式的 RegExp 对象

2)replacement参数

一个字符串值。替换的文本或生成替换文本的函数。

replace() 方法第二个参数中特殊字符:

约定字符串说明
$1、$2、...、$99与正则表达式中的第 1~99 个子表达式相匹配的文本
$&(美元符号+连字符)与正则表达式相匹配的子字符串
$’(美元符号+切换技能键)位于匹配子字符串左侧的文本
$'(美元符号+单引号)位于匹配字符串右侧的文本
$$表示 $ 字符串

3)flags参数

var pattern = /pattern/flags;中flags可以是gimsuyg指定全局匹配,i不区分大小写、m多行匹配、s启用“dotall”模式,允许点.匹配换行符\nu是启用完整的 Unicode 支持和y是 "Sticky"模式:允许在源字符串中的给定位置执行搜索。

3、使用replace()提取替换字符串

1)可以使用replace()提取html中指定内容并进行替换

function replaceCallback(m,g1,g2){
   console.log("-----begin-----");
   console.log("m = "+m);
   console.log("g1 = "+g1);
   console.log("g2 = "+g2);
   console.log("-----end-----");
   return g1+g2;
  }
var content = "<p><strong>1、new 运算符</strong>:用于创建对象和调用构造函数。这个我们创建对象实例就比较常用了,比如:</p><pre class=\"prettyprint linenums cs\">     StringBuilder str=new  StringBuilder();</pre><p><strong>"
+"2、new 修饰符</strong>:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。简单的说,就是现在写的这个类,想写一个和基类中相同的成员,而不继承基类的。运用多态的特性时,也不会调用这个显示隐藏的方法。具体看下如下代码:"
+"</p><pre class=\"prettyprint linenums\">using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace ConsoleApp2\r\n{\r\n    public class Program\r\n    {\r\n        static void Main(string[] args)\r\n        {\r\n            animal a = new animal();\r\n            a.name = \"animal\";\r\n            a.say();\r\n            cat c = new cat();\r\n            c.name = \"cat\";\r\n            c.say();\r\n            dog d = new dog();\r\n            d.name = \"dog\";\r\n            d.say();\r\n            sheep s = new sheep();\r\n            s.name = \"sheep\";\r\n            s.say();\r\n            animal a1 = new cat();\r\n            a1.say();\r\n            animal a2 = new dog();\r\n            a2.say();\r\n            animal a3 = new sheep();\r\n            a3.say();\r\n        }\r\n    }\r\n    class animal\r\n    {\r\n        public string name { get; set; }\r\n        public virtual void say()\r\n        {\r\n            Console.WriteLine(\"animal say\");\r\n        }\r\n    }\r\n    class cat : animal\r\n    {\r\n        public override void say()\r\n        {\r\n            Console.WriteLine(\"cat say\");\r\n        }\r\n    }\r\n    class dog : animal\r\n    {\r\n        public new void say()   //这个方法被显示隐藏了\r\n        {\r\n            Console.WriteLine(\"dog say\");\r\n        }\r\n    }\r\n    class sheep : animal\r\n    {\r\n    }\r\n\r\n}<br></pre><p><strong>";
console.log(content.replace(/<pre class=\"prettyprint linenums\s*(.*?)\"\s*>(.+?)<\/pre>/gms, replaceCallback));

2)改变字符串格式

function replacer(match, p1, p2, p3, offset, string) {
  return [p1, p2, p3].join(' - ');
}
var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
console.log(newString);  // abc - 12345 - #$*%

4、replace()中特殊字符($)的使用

replace() 方法第二个参数中特殊字符($)的使用,如下

var re = /(\w+)\s(\w+)/;
var str = "Levi Zhong";
var newstr = str.replace(re, "$2, $1"); console.log(newstr);

1)$'表示匹配字符串右边的文本

let str = 'hello world';
let str4 = str.replace(/hello/g, "$'");
let str5 = str.replace(/o/g, "$'");
console.log(str4) // world world
console.log(str5) //hell world wrldrld

2) $`表示匹配字符串文本左边的文本

let str = 'hello world';
let str6 = str.replace(/world/,"$`");
console.log(str6) //hello hello 

3)$$表示插入一个$

let str = '¥7000.00';
let str7 = str.replace(/¥/,"$$");
console.log(str7) //$7000.00

推荐阅读
cjavapy编程之路首页