Javascript反向匹配过程

时间:2013-06-26 16:33:58

标签: javascript regex

查看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并在多个进程中使用它,例如提取数据,从一些数据重构原始文本。

现在我必须让插件提供一个能够返回原始文本的函数,并希望有一种方法可以使它成为所以他们没有必要通过重复使用正则表达式。我可以将一个自定义函数原型化到RegExp类上然后使用它,我只是希望它已经有一些过程来执行此操作。

2 个答案:

答案 0 :(得分: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§/ 

当然,在捕获组之外使用正则表达式的功能时,这基本上是不可能的(显然我没有更好地处理我的生活:)即使没有正则表达式功能在捕获组之外使用:如何重建不区分大小写的匹配正确的情况?

当然,可以做很多工作来改进上述代码。

答案 1 :(得分:0)

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

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

但是如果你的常规exprssion工作并匹配整个字符串,例如"abc".match(/.(.*)/) returns ["abc", "bc"]那么你可以通过myResult[0]

获取完整的字符串