Объединение регулярных выражений в Javascript
Можно ли комбинировать регулярные выражения в javascript.
Для ex:
var lower = /[a-z]/;
var upper = /[A-Z]/;
var alpha = upper|lower;//Is this possible?
т. могу ли я назначать регулярные выражения для переменных и объединять эти переменные с помощью символов совпадения с шаблонами, как
мы выполняем регулярные выражения
Ответы
Ответ 1
Ответ: да! Вы должны инициализировать переменную в классе 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);
Ответ 2
Если регулярные выражения не известны заранее,
var one = /[a-z]/;
var two = /[A-Z]/;
var one_or_two = new RegExp("(" + one.source + ")|(" + two.source + ")")
Ответ 3
Если это то, что вам нужно сделать только один или два раза, я бы придерживался этого в каждом случае, как это было предложено другими ответами.
Если вам нужно сделать много, однако, несколько вспомогательных функций могут улучшить удобочитаемость. Например:
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));
};
Альтернативы обернуты в группы, не связанные с захватом, и объединены с оператором дизъюнкции, что делает этот подход более надежным для более сложных регулярных выражений.
Обратите внимание, что вам нужно будет включить этот код перед вызовом вспомогательных функций!
Ответ 4
alpha = new RegExp( lower.source + "|" + upper.source );
console.log( alpha );
// /[a-z]|[A-Z]/