查看RegExp对象文档并找不到我想要的方法,或者我只是不够努力.
说我有文字:
var text = "§193:And Some Text§";
Run Code Online (Sandbox Code Playgroud)
还有一个RegExp对象:
var reg = /§([0-9]+):(.*?)§/;
Run Code Online (Sandbox Code Playgroud)
运行reg.match(text);显然会给我一个像这样的数组:
["§193:And Some Text§","193","And Some Text"]
Run Code Online (Sandbox Code Playgroud)
有没有办法改变这个过程?这样我就给一个函数提供了一个数组,它与RegExp具有相同数量的匹配组,并给了我一些文本的样子:
var reg = /§([0-9]+)§(.*?)§/;
var data = ["293","Some New Text"];
var text = reg.rmatch(data);
Run Code Online (Sandbox Code Playgroud)
而text现在将是§293:Some New Text§
我试图为我的代码创建一个插件系统,其中一部分需要从插件中获取regexp并在多个进程中使用它,例如提取数据,从一些数据重构原始文本.
现在我必须让插件提供一个能够返回原始文本的函数,并且希望有一种方法可以使它成为所以他们没有必要通过重复使用正则表达式.我可以将一个自定义函数原型化到RegExp类上然后使用它,我只是希望它已经有一些进程来执行此操作.
function rregex(regex, data) {\n var arr = new String(regex).split(/\\(.*?\\)/);\n if (!(arr instanceof Array) || !(data instanceof Array) ||\n (arr.length != data.length+1)) return false;\n\n var result = arr[0];\n for(var i=0; i < data.length; i++) {\n result += data[i] + arr[i+1]; \n }\n return result;\n}\n\nvar reg = /\xc2\xa7([0-9]+):(.*?)\xc2\xa7/;\nvar data = ["293","Some New Text"];\n\nconsole.log(rregex(reg, data))\nRun Code Online (Sandbox Code Playgroud)\n\n结果
\n\n/\xc2\xa7293:Some New Text\xc2\xa7/ \nRun Code Online (Sandbox Code Playgroud)\n\n当然,当正则表达式的功能在捕获组之外使用时,这从根本上是不可能的(显然我与我的生活没有什么更好的关系:)即使没有在捕获组之外使用正则表达式功能:您将如何重建不区分大小写的匹配正确的情况?
\n\n当然,可以做很多事情来改进上述代码。
\n