Jeśli jest coś, co trzeba zrobić tylko raz lub dwa razy, będę trzymać się robi to na podstawie na razie jako sugerowane przez innych odpowiedzi.
Jeśli jednak potrzebujesz dużo, kilka funkcji pomocniczych może poprawić czytelność. Na przykład:
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);
A oto kod, jeśli chcesz korzystać z tych funkcji:
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));
};
Alternatywy są zapakowane w niewyspecjalizowanych przechwytywania grup i połączone z operatorem alternatywy, dzięki czemu jest nieco bardziej niezawodne podejście do bardziej złożonych wyrażeń regularnych.
Należy pamiętać, że przed należy podać ten kod, wywołując funkcje pomocnika!
Czy masz dwa oddzielne wyrazy regularne lub po prostu chcesz '/ [a-zA-Z] /'? –
Wiem, że .... Muszę wiedzieć, czy jest to możliwe –
możliwy duplikat [Combine Regexp] (http://stackoverflow.com/questions/869809/combine-regexp) –