是否可以在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