Si esto es algo que sólo tiene que hacer una o dos veces, me quedo con hacerlo en función de cada caso, según lo sugerido por otras respuestas.
Si necesita hacer mucho, sin embargo, un par de funciones auxiliares pueden mejorar la legibilidad. Por ejemplo:
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);
Y aquí está el código si desea utilizar dichas funciones:
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));
};
Las alternativas están envueltos en grupos de no-captura y se combinan con el operador de disyunción, haciendo de este un poco más enfoque robusto para expresiones regulares más complejas.
Tenga en cuenta que deberá incluir este código antes de ¡llamando a las funciones auxiliares!
¿Tiene dos expresiones regulares separadas o simplemente quiere '/ [a-zA-Z] /'? –
Sé que .... Necesito saber si esto es posible –
posible duplicado de [Combine Regexp] (http://stackoverflow.com/questions/869809/combine-regexp) –