首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript:组合两个正则表达式以同时满足两个正则表达式?

JavaScript:组合两个正则表达式以同时满足两个正则表达式?
EN

Stack Overflow用户
提问于 2018-08-09 23:21:55
回答 2查看 135关注 0票数 0

如何组合多个正则表达式以同时满足这两个条件?

下面有3个字符串和2个正则表达式:

  • 第一个正则表达式不允许字符串以美元符号开头。
  • 第二个正则表达式不允许字符串包含句点。

如何组合这两个正则表达式,使字符串不以美元符号开头,并将句点视为匹配?

代码语言:javascript
复制
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);

EN

回答 2

Stack Overflow用户

发布于 2018-08-10 00:04:33

RegExps不能以这种方式轻松组合。

你最好测试(在这种情况下匹配没有任何意义)所有的代码。

代码语言:javascript
复制
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));
票数 0
EN

Stack Overflow用户

发布于 2018-08-14 03:47:09

通过使用OR metaChar "|“,您可以只使用一个RegX来同时测试这两个值

代码语言:javascript
复制
var regX = /^\$|\./;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51770731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档