是否可以在javascript中組合正則表達式。在Javascript中結合正則表達式
對於前:
var lower = /[a-z]/;
var upper = /[A-Z]/;
var alpha = upper|lower;//Is this possible?
即。我可以指定正則表達式的變量和使用模式匹配字符在正則表達式
是否可以在javascript中組合正則表達式。在Javascript中結合正則表達式
對於前:
var lower = /[a-z]/;
var upper = /[A-Z]/;
var alpha = upper|lower;//Is this possible?
即。我可以指定正則表達式的變量和使用模式匹配字符在正則表達式
答案是肯定的!您必須初始化RegExp類下的變量:
var lower = new RegExp(/--RegexCode--/);
var upper = new RegExp(/--RegexCode--/);
因此,可以動態創建正則表達式。創建後:
"sampleString".replace(/--whatever it should do--/);
然後,你可以將它們正常結合,是的。
var finalRe = new RegExp(lower.source + "|" + upper.source);
如果正則表達式是事先不知道這些結合變量作爲 我們這樣做,
var one = /[a-z]/;
var two = /[A-Z]/;
var one_or_two = new RegExp("(" + one.source + ")|(" + two.source + ")")
alpha = new RegExp(lower.source + "|" + upper.source);
console.log(alpha);
// /[a-z]|[A-Z]/
如果這是你唯一需要做一次或兩次,我會用做在每個案例基礎上通過其他的答案中所建議的堅持。
但是,如果您需要做很多工作,一些輔助函數可能會提高可讀性。例如:
var lower = /[a-z]/,
upper = /[A-Z]/,
digit = /[0-9]/;
// All of these are equivalent, and will evaluate to /(?:a-z)|(?:A-Z)|(?:0-9)/
var anum1 = RegExp.any(lower, upper, digit),
anum2 = lower.or(upper).or(digit),
anum3 = lower.or(upper, digit);
而這裏的代碼,如果你想使用這些功能:
RegExp.any = function() {
var components = [],
arg;
for (var i = 0; i < arguments.length; i++) {
arg = arguments[i];
if (arg instanceof RegExp) {
components = components.concat(arg._components || arg.source);
}
}
var combined = new RegExp("(?:" + components.join(")|(?:") + ")");
combined._components = components; // For chained calls to "or" method
return combined;
};
RegExp.prototype.or = function() {
var args = Array.prototype.slice.call(arguments);
return RegExp.any.apply(null, [this].concat(args));
};
的替代品被包裹在非捕獲組,並用脫節操作相結合,使之成爲一個較爲更復雜的正則表達式的魯棒方法。
請注意,您需要在之前包含此代碼調用輔助函數!
你有兩個單獨的正則表達式還是隻想'/ [a-zA-Z] /'? – 2012-02-09 15:05:06
我知道....我需要知道這是否可能 – 2012-02-09 15:07:09
[Combine Regexp](http://stackoverflow.com/questions/869809/combine-regexp) – 2012-02-09 21:12:10