程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在字符串中的 Y 索引处查找 X 字符并使用此信息过滤数组大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在字符串中的 Y 索引处查找 X 字符并使用此信息过滤数组?

开发过程中遇到在字符串中的 Y 索引处查找 X 字符并使用此信息过滤数组的问题如何解决?下面主要结合日常开发的经验,给出你关于在字符串中的 Y 索引处查找 X 字符并使用此信息过滤数组的解决方法建议,希望对你解决在字符串中的 Y 索引处查找 X 字符并使用此信息过滤数组有所启发或帮助;

我得到了一个字符串和一个字符串数组。字符串的例子是:

let example1 = "_a_t_";
let example2 = "N_l_:t___";
let example3 = "B__z_l";

我们可以看到,字符串长度为 Z 个字符,并且得到了不是 _ 的随机数量的字符。字符串永远不会只有 _,也永远不会没有下划线。

let array = ["Walts","Grate","Ralts","names"];

如果我们使用example1字符串和上面的数组,我想过滤数组,结果变成:

let newArray = ["Walts","Ralts"];

基本上,我想使用已知字符及其位置来过滤数组。目前我已经找到了如何找到第一个字符并使用它来过滤数组。这是怎么做到的:

let example1 = "_a_t_";
let array = ["Walts","names"];

let charIndex = example1.match("[a-zA-Z]").index;
/*Currently using the RegEx [a-zA-Z],but this should be changed to include all characters 
besIDes underscores but I don't kNow what to put in between the square brackets*/
let firstChar = example1.charat(charIndeX);

let filteredArray = array.filter(function (element) {
  return element.charat(charIndeX) === firstChar;
});

console.log(filteredArray); //this returns ["Walts","names"]

我卡在这里了。如果字符串中有多个显示的字符,我不知道该怎么做。经过一番思,对我来说合乎逻辑的事情是以某种方式计算所有不是下划线的字符,然后使用它进行循环。循环会找到每个字符及其索引,然后过滤数组。当数组被完全过滤时,循环将完成。使用上面的数组和 example1 字符串,希望的目标是获得 ["Walts","Ralts"]

我认为问题已得到彻底解释,最终目标也很明确。这是我第一次在 Stack Overflow 上发帖,所以我很兴奋。

解决方法

我认为如果您从每个模式创建一个 regular expression 并仅针对整个模式测试每个字符串,这可能会更容易。这是概念实现的快速证明。

它只是在创建表达式时将 _ 替换为 .,因此下划线将匹配任何字符,然后根据字符串是否匹配来过滤数组。

例如,字符串 "_a_t_" 成为匹配 Walts 和 Ralts 但不匹配 Grate 或 Names 的正则表达式 /^.a.t.$/gi

正则表达式模式 /^.a.t.$/gi 大致翻译为:

  • ^ 字符串开头
  • . 后跟任意字符
  • a 后跟文字 'a'
  • . 后跟任意字符
  • t 后跟文字 't'
  • . 后跟任意字符
  • $ 字符串结束。

const example1 = "_a_t_";
const example2 = "N_l_:t___";
const example3 = "B__z_l";
const array = ["Walts","Grate","Ralts","Names"];

// turn the String patterns into regular expressions
const regexes = [example1,example2,example3].map(pattern => {
  return new RegExp(`^${pattern.replaceAll('_','.')}$`,'i');
});

// filter out names that don't match any of the expressions
const result = array.filter(name => regexes.some(r => r.test(Name)));
  
console.log(result);

编辑:更新以简化示例实现。

,

另一种选择是创建一个正则表达式并将所有单词与非捕获组中的所有单词连接起来,以 | 作为分隔符,然后将 _ 替换为 {{1} } 匹配非空白字符以不匹配空格

模式看起来像:

\S

模式匹配:

  • ^(?:\Sa\St\S|N\Sl\S:t\S\S\S|B\S\Sz\Sl)$ 字符串开头
  • ^ 非捕获组
    • (?: 第一种选择,其中 \Sa\St\S 匹配非空白字符
    • \S
    • | 第二种选择
    • N\Sl\S:t\S\S\S
    • | 第三个选择
  • B\S\Sz\Sl 关闭非捕获组
  • ) 字符串结束

例如

$

如果你想匹配一个空格,你可以使用 let example1 = "_a_t_"; let example2 = "N_l_:t___"; let example3 = "B__z_l"; let array = ["Walts","Names"]; const Strings = [example1,example3]; const regex = new RegExp(`^(?:${Strings.join("|").replace(/_/g,"\\S")})$`); console.log(array.filter(s => regex.test(s))); 而不是 .

注意,在 RegExp() 构造函数中,您必须对反斜杠进行双重转义。如果任何字符串包含正则表达式的特殊字符,您必须escape 这些字符。

另一个例子:

\S

大佬总结

以上是大佬教程为你收集整理的在字符串中的 Y 索引处查找 X 字符并使用此信息过滤数组全部内容,希望文章能够帮你解决在字符串中的 Y 索引处查找 X 字符并使用此信息过滤数组所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: