在Javascript中组合正则表达式
Combining regular expressions in 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--/);
因此,regex可以动态创建。创建后:
"sampleString".replace(/--whatever it should do--/);
然后你可以正常地组合它们,是的。
var finalRe = new RegExp(lower.source + "|" + upper.source);
如果事先不知道regexp,
var one = /[a-z]/;
var two = /[A-Z]/;
var one_or_two = new RegExp("(" + one.source + ")|(" + two.source + ")")
使用一个通用函数:
const getComposedRegex = (...regexes) => new RegExp(regexes.map(regex => regex.source).join("|"))
然后用任意数量的Regex调用它。
const reg1 = /[w]{3}/i
const reg2 = /http/i
const composedReg = getComposedRegex(reg1, reg2)
如果这是你只需要做一两次的事情,我会坚持按照其他答案的建议,根据具体情况来做。
然而,如果您需要做很多工作,那么使用几个辅助函数可能会提高可读性。例如:
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));
};
备选方案被封装在非捕获组中,并与析取运算符相结合,这使得对于更复杂的正则表达式来说,这是一种更稳健的方法。
请注意,在调用helper函数之前,您需要包含此代码!
基于Bry6n的答案,我使用了一个解决方案:
const Regexes = {
Empty: /^$/,
Minus: /^[-]$/,
DotAndNumber: /^'.'d+$/,
NumberAndDot: /^'d+'.$/,
Float: /^[-]?'d+('.'d+)?$/,
};
const orRegex = (...regexes) =>
new RegExp(regexes.map(r => r.source).join('|'));
const FloatInputRegex = orRegex(
Regexes.Empty,
Regexes.Minus,
Regexes.DotAndNumber,
Regexes.NumberAndDot,
Regexes.Float,
);
alpha = new RegExp( lower.source + "|" + upper.source );
console.log( alpha );
// /[a-z]|[A-Z]/
相关文章:
- 组合angularjs表单字段的两个正则表达式
- 在 JS 中组合两个正则表达式
- 在 JavaScript 中组合正则表达式
- 用于在组合文件中查找 AMD 定义呼叫的正则表达式
- 如何在字符串上组合JS replace()方法中的3个正则表达式模式
- 两个正则表达式的组合
- 如何组合以下正则表达式
- 正则表达式“gi”修饰符的组合不适用于单个单词
- 将两个正则表达式组合在一起
- 两个正则表达式的组合
- 组合2个正则表达式,其中一个使用OR运算符进行精确匹配
- 如何创建正则表达式javascript函数来匹配特定的字符串组合
- 将正则表达式组合为空格和换行符
- 正在尝试组合exlude和include正则表达式
- 在Javascript中组合正则表达式
- 在OR中将正则表达式组合在一起
- 用于字符串组合和序列规则的正则表达式角2
- 使用or组合两个正则表达式条件
- 用于字母/数字组合的正则表达式
- 正则表达式 - 组合正则表达式 - 字符串的开头和结尾