1
我創建了一個類,可以獲取正則表達式對象中的所有組的開始和結束位置(https://github.com/valorize/MultiRegExp2)。我想通過這個新的「類」來包裝最初的正則表達式,並添加一個新方法execForAllGroups
。我如何做到這一點/覆蓋舊的正則表達式,但仍然使用它的所有功能,如搜索,測試等?如何擴展正則表達式對象
我:
function MultiRegExp2(baseRegExp) {
let filled = fillGroups(baseRegExp);
this.regexp = filled.regexp;
this.groupIndexMapper = filled.groupIndexMapper;
this.previousGroupsForGroup = filled.previousGroupsForGroup;
}
MultiRegExp2.prototype = new RegExp();
MultiRegExp2.prototype.execForAllGroups = function(string) {
let matches = RegExp.prototype.exec.call(this.regexp, string);
...
編輯: 感謝T.J.克勞德我適應了ES6類語法和擴展正則表達式:
class MultiRegExp extends RegExp {
yourNiftyMethod() {
console.log("This is your nifty method");
}
}
But
let rex = new MultiRegExp(); // rex.constructor.name is RegExp not MultiRegExp
rex.yourNiftyMethod(); // returns: rex.yourNiftyMethod is not a function
當我從字符串或其他對象的所有作品延伸的預期。
我喜歡用類擴展RegExp的想法,但是我得到:'Uncaught TypeError:rex.yourNiftyMethod不是函數' – velop
鑑於文章http://v8project.blogspot.de/2017/01/speeding-up -v8-regular-expressions.html也許最好將正則表達式保存爲屬性並創建手槽方法? 'test(str){return this.regex.test(str); }'? – velop
@velop:也許,或許這是過早的微觀優化。 :-)但有趣的文章。如果需要超級性能,一旦Chrome 57發佈,您可能需要兩種方式進行測試。 ([此頁面](https://en.wikipedia.org/wiki/Google_Chrome_version_history)表明,Chrome Canary可能已經在使用該版本的V8。) –