[英]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.