想要在javascript中编写正则表达式,它将检查所有提到的字符是否至少存在

问题描述 投票:0回答:3

我有字符串 s,需要检查该字符串是否包含从 a 到 z 的每个字母。检查此条件的正则表达式是什么?其中 s 可以是非常大的字符串,其中包含多个用空格分隔的单词。

例如:

pattern.test("zy aemnofgbc jkhil pqasdfrs tuvrhfwx") 

应该返回 true,因为它至少包含所有 a-z 字母表。

pattern.test("sdfasbcd effsdgh ijsfghtkl mnhtop qrsjht uvwmnmx yfdhjkd") 

应该返回 false,因为它没有字母 z。

寻找最佳解决方案。

javascript regex typescript string javascript-objects
3个回答
2
投票

最简单的方法是提取独特的字符

function testAlphabet(str) {
  var chars = str.replace(/[^a-z]/g).split(''); // it may need to convert to lowercase
  // remove duplicate
  chars = [...new Set(chars)];
  console.log(chars.join('').length == 26)
}

testAlphabet("zy aemnofgbc jkhil pqasdfrs tuvrhfwx")

testAlphabet("sdfasbcd effsdgh ijsfghtkl mnhtop qrsjht uvwmnmx yfdhjkd")


1
投票

使用正则表达式的第一个解决方案 - 删除所有非字母字符、重复项,并将字符串长度与 26 进行比较。

第二种没有正则表达式的解决方案,只需检查字符串中的每个字母字符。

const test1 = (str) => str.replace(/[^a-z]|(.)(?=.*\1)/gi, '').length === 26;

const test2 = (str) => [...`abcdefghijklmnopqrstuvwxyz`]
  .every(ch => str.includes(ch));


console.log(test1('zy aemnofgbc jkhil pqasdfrs tuvrhfwx'));
console.log(test1('y aemnofgbc jkhil pqasdfrs tuvrhfwx'));

console.log(test2('zy aemnofgbc jkhil pqasdfrs tuvrhfwx'));
console.log(test2('y aemnofgbc jkhil pqasdfrs tuvrhfwx'));
.as-console-wrapper{min-height: 100%!important; top: 0}


0
投票

都是a-z

function isAllaz() {
  let s = "zy aemnofgbc jkhil pqasdfrs tuvrhfwx";
  //console.log([...new Set(s.split("").filter(e => e.match(/[a-z]/)))].length==26);
  return [...new Set(s.split("").filter(e => e.match(/[a-z]/)))].length==26;
}
© www.soinside.com 2019 - 2024. All rights reserved.