Nếu đây là điều bạn chỉ cần thực hiện một lần hoặc hai lần, tôi muốn thực hiện theo từng trường hợp như đề xuất của các câu trả lời khác.
Nếu bạn cần làm nhiều, tuy nhiên, một vài chức năng trợ giúp có thể cải thiện khả năng đọc. Ví dụ:
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);
Và đây là mã nếu bạn muốn sử dụng những chức năng:
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));
};
Các phương án được bao bọc trong không chụp nhóm và kết hợp với các nhà điều hành phân ly, làm cho này một phần nào hơn cách tiếp cận mạnh mẽ cho các cụm từ thông dụng phức tạp hơn.
Lưu ý rằng bạn sẽ cần phải bao gồm mã này trước khi gọi hàm trợ giúp!
Nguồn
2012-02-09 17:10:23
Bạn có hai regexps riêng biệt hoặc chỉ muốn '/ [a-zA-Z] /'? –
Tôi biết rằng .... Tôi cần phải biết liệu điều này có thể là –
bản sao có thể có của [Kết hợp Regexp] (http://stackoverflow.com/questions/869809/combine-regexp) –