簡體   English   中英

Javascript反向匹配過程

[英]Javascript Reverse match process

查看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類上,然后使用它,我只是希望它已經有一些過程可以做到這一點。

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§/ 

當然,當在捕獲組之外使用正則表達式的功能時,這從根本上是不可能的(顯然我與我的生活沒有更好的關系:)即使沒有在捕獲組之外使用正則表達式功能:如何用正確的大小寫重新構造不區分大小寫的匹配?

當然可以做很多事情來改進上面的代碼。

如果regular expression與整個字符串不匹配或完全不匹配,則不可能。

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

但是,如果您的常規表達式有效並且匹配了整個字符串,例如"abc".match(/.(.*)/) returns ["abc", "bc"]則可以通過myResult[0]來獲取完整的字符串

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM