如何组合多个正则表达式以同时满足这两个条件?
下面有3个字符串和2个正则表达式:
如何组合这两个正则表达式,使字符串不以美元符号开头,并将句点视为匹配?
var good_string = "flkad sdfa$a f fjf";
var bad_string_1 = "$flkadjf";
var bad_string_2 = "flk.adjf";
var does_not_contain_periods = new RegExp('^[^.]*$');
var does_not_start_with_dollar_sign = new RegExp('^(?!\\$)');
var combined_regular_expressions = new RegExp("(" + does_not_contain_periods.source + ")(" + does_not_start_with_dollar_sign.source + ")");
console.log('--- does_not_contain_periods ---')
console.log(good_string.match(does_not_contain_periods));
console.log(bad_string_1.match(does_not_contain_periods));
console.log(bad_string_2.match(does_not_contain_periods));
console.log('--- does_not_start_with_dollar_sign ---')
console.log(good_string.match(does_not_start_with_dollar_sign));
console.log(bad_string_1.match(does_not_start_with_dollar_sign));
console.log(bad_string_2.match(does_not_start_with_dollar_sign));
console.log('--- combined_regular_expressions ---')
console.log(good_string.match(combined_regular_expressions));
console.log(bad_string_1.match(combined_regular_expressions));
console.log(bad_string_2.match(combined_regular_expressions));
console.log('--- desired result ---')
console.log(good_string.match(does_not_contain_periods) !== null && good_string.match(does_not_start_with_dollar_sign) !== null);
console.log(bad_string_1.match(does_not_contain_periods) !== null && bad_string_1.match(does_not_start_with_dollar_sign) !== null);
console.log(bad_string_2.match(does_not_contain_periods) !== null && bad_string_2.match(does_not_start_with_dollar_sign) !== null);
发布于 2018-08-10 00:04:33
RegExps不能以这种方式轻松组合。
你最好测试(在这种情况下匹配没有任何意义)所有的代码。
function testAll(regexps, ...args) {
return regexps.every(regexp => regexp.test(...args));
}
var good_string = "flkad sdfa$a f fjf";
var bad_string_1 = "$flkadjf";
var bad_string_2 = "flk.adjf";
console.log(testAll([/^[^.]*$/, /^(?!\$)/], good_string));
console.log(testAll([/^[^.]*$/, /^(?!\$)/], bad_string_1));
console.log(testAll([/^[^.]*$/, /^(?!\$)/], bad_string_2));
发布于 2018-08-14 03:47:09
通过使用OR metaChar "|“,您可以只使用一个RegX来同时测试这两个值
var regX = /^\$|\./;
https://stackoverflow.com/questions/51770731
复制相似问题