說我有以下的正則表達式:如何在javascript中追加到現有的正則表達式?
var myregex = /^(i|blah|ho)$/
我有另一個變量:
var list = ["some","another"]
如何讓這樣我可以追加在列表中的話someregex使得「myregex」結果:
var myregex = /^(i|blah|ho|some|another)$/
說我有以下的正則表達式:如何在javascript中追加到現有的正則表達式?
var myregex = /^(i|blah|ho)$/
我有另一個變量:
var list = ["some","another"]
如何讓這樣我可以追加在列表中的話someregex使得「myregex」結果:
var myregex = /^(i|blah|ho|some|another)$/
我會傾向於嘗試尋找另一種方式接近開頭的單詞原始列表中的問題,但如果你真的需要追加到現有的正則表達式實例有一個source
property,它返回表達式的來源作爲字符串和接受字符串的構造函數。所以,你可以這樣做:
var rex = /^(i|blah|ho)$/;
var list = ["some","another"];
rex = new RegExp(rex.source.replace(")$", "|" + list.join("|") + ")$");
這將失去標誌,所以你可能要使用的第二個參數的構造函數RegExp
,建設"gi"
或者基於任何字符串global
,ignoreCase
,multiline
等。原始正則表達式的屬性。 (或者對於一個黑客就是用rex.toString()
,抓住任何字符按照最後/
你回來字符串中,並提供這些作爲第二個參數),因此,一個較爲完整的版本上面可能是:
// (I added a flag to this one to check that the flags processing worked)
var rex = /^(i|blah|ho)$/i;
var list = ["some","another"];
var flags = rex.toString();
var index = flags.lastIndexOf("/");
flags = flags.substring(index + 1);
rex = new RegExp(rex.source.replace(")$", "|" + list.join("|") + ")$"), flags);
還要注意的是,如果你的話有他們特殊規則表達式(.
,\
,/
,$
等)字符,上面會破裂。字母數字是好的,否則你可能想要使用RegExp.escape
的各種實現中的一種(可惜標準中沒有),並用它來逃避單個單詞。
有兩種方法可以做到這一點。
1)通過陣列的concat
var myregex = /^(i|blah|ho)$/;
var list = ["some","another"];
var _newList = myregex.toString().match(/([a-z]+)/gi).concat(list);
var myNewRegEx = new RegExp("/^(" + _newList.join('|') + ")$/");
2.)通過正則表達式替換
var myregex = /^(i|blah|ho)$/;
var list = ["some","another"];
var _t = myregex.toString().replace(/\)/, '|' + list.join('|') + ')');
var myNewRegEx = new RegExp(_t);
不知哪個方向是更快。
你需要一個正則表達式嗎?使用'indexOf' –