6

查看 RegExp 对象文档,找不到可以满足我要求的方法,或者我只是看起来不够努力。

说我有文字:

var text = "§193:And Some Text§";

还有一个 RegExp 对象:

var reg = /§([0-9]+):(.*?)§/;

运行reg.match(text);显然会给我一个像这样的数组:

["§193:And Some Text§","193","And Some Text"]

有没有办法扭转这个过程?这样我就给一个函数提供了一个数组,它具有与 RegExp 具有相同数量的匹配组,并返回文本的样子:

var reg = /§([0-9]+)§(.*?)§/;
var data = ["293","Some New Text"];
var text = reg.rmatch(data);

现在text将是§293:Some New Text§

我正在尝试为我的代码制作一个插件系统,其中一部分需要从插件中获取一个正则表达式并在多个过程中使用它,例如提取数据,从一些数据中重构原始文本。

现在我必须让插件提供一个可以返回原始文本的函数,并希望有一种方法可以做到这一点,这样他们就不必只是通过某种方式重用正则表达式。我可以在 RegExp 类上创建一个自定义函数的原型,然后使用它,我只是希望它已经有一些过程可以做到这一点。

4

2 回答 2

2
function rregex(regex, data) {
    var arr = new String(regex).split(/\(.*?\)/);
    if (!(arr instanceof Array) || !(data instanceof Array) ||
        (arr.length != data.length+1)) return false;

    var result = arr[0];
    for(var i=0; i < data.length; i++) {
        result += data[i] + arr[i+1]; 
    }
    return result;
}

var reg = /§([0-9]+):(.*?)§/;
var data = ["293","Some New Text"];

console.log(rregex(reg, data))

结果

/§293:Some New Text§/ 

当然,当正则表达式的功能在捕获组之外使用时,这从根本上是不可能的(显然我的生活与我的生活没有什么更好的关系:)即使没有在捕获组之外使用正则表达式功能:您将如何重建不区分大小写的匹配正确的大小写?

当然,可以做很多事情来改进上面的代码。

于 2013-06-26T18:47:23.713 回答
0

如果regular expression与整个字符串不匹配或无法完全匹配,则不可能。

例如"abc".match(/.(.)/)返回["ab", "b"]但不包含任何地方的完整字符串,因此丢失了最后一个字符“c”。

但是如果您的常规表达式有效并匹配整个字符串,例如"abc".match(/.(.*)/) returns ["abc", "bc"]然后您可以通过myResult[0]

于 2013-06-26T19:40:01.543 回答