Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于带有占位符的模式筛选字符串数组_Javascript_Arrays_Regex_String_Reduce - Fatal编程技术网

Javascript 基于带有占位符的模式筛选字符串数组

Javascript 基于带有占位符的模式筛选字符串数组,javascript,arrays,regex,string,reduce,Javascript,Arrays,Regex,String,Reduce,至少一个月以来,我每天都在努力做到这一点。我搜索过stackoverflow,我读过MDN数组、字符串、正则表达式等,一次又一次地引用,但没有任何帮助。我有点熟悉正则表达式,但这是我的头。我相信这里会有人用一行代码解决这个问题,这就是为什么我要等到我要把电脑扔出窗外才寻求帮助。我真的很想为自己找到解决办法,但我就是做不到 我很喜欢一个密码游戏,其中随机字母被用来“编码”一首诗或一个故事,我可能不需要在这里描述它,但这里有一张图片以防万一 所以我认为创建一个表单是一个很好的练习,在这个表单中,您

至少一个月以来,我每天都在努力做到这一点。我搜索过stackoverflow,我读过MDN数组、字符串、正则表达式等,一次又一次地引用,但没有任何帮助。我有点熟悉正则表达式,但这是我的头。我相信这里会有人用一行代码解决这个问题,这就是为什么我要等到我要把电脑扔出窗外才寻求帮助。我真的很想为自己找到解决办法,但我就是做不到

我很喜欢一个密码游戏,其中随机字母被用来“编码”一首诗或一个故事,我可能不需要在这里描述它,但这里有一张图片以防万一

所以我认为创建一个表单是一个很好的练习,在这个表单中,您可以输入一个由字母、数字和“?”组合而成的未知模式。在图中,你看到用“YACAZ”表示的单词,这个单词中有两个A,所以你知道这两个字母是相同的。因此,在我的函数中,您可以使用任何数字0-9作为占位符,因此使用相同的示例,您可以输入“?1a1?”

这是我目前的情况。每次我尝试遍历regex给我的数组时,我都会在同一个地方结束,试图(但失败)比较两组嵌套数组。无论我如何尝试将它们分解和比较,最终都会变成一个巨大的无功能的混乱。我可以得到占位符索引,但接下来呢

我并不反对洛达斯,但我在这方面的经验很少,所以也许它能帮上忙?它不会做任何普通javascript无法做到的事情,是吗

const单词=[
{单词:'便宜货',分数:1700},
{单词:'气球',分数:1613},
{单词:'堡垒',分数:1299},
{单词:'巴比伦',分数:634},
{单词:'基于',分数:425},
{单词:'巴松管',乐谱:371},
{单词:'baldwin',分数:359},
{单词:“巴林”,分数:318},
{单词:'balmain',分数:249},
{单词:'basilan',分数:218},
{单词:'bang on',分数:209},
{单词:'垒手',得分:204},
{单词:'击球手',得分:204},
{单词:“巴枯宁”,分数:143},
{单词:'barchan',分数:135},
{单词:“巴斯蒂安”,得分:133},
{单词:'balagan',分数:118},
{单词:'balafon',分数:113},
{单词:'bank on',分数:113},
{单词:'圆珠笔',分数:111},
]
常量输入='ba1122n'//这些是数字1,而不是小写L
//使用输入“ba1122n”,上面列表中的匹配词应该是“气球”和“巴松管”。
导出常量stringDiff=(a,b)=>{
让match=false,
错误=“”
常量结果=[]
//Idk为什么我在回路中有一个减速器。我试过很多很多其他的
//循环的方式,通常是“for(const i in whatever)”,但它们都以
//同样的问题。我通常在减速器内有一个回路,而不是相反。
常量forLoop=(数组)=>{
a、 减少((acc、curr、next)=>{
const aa=[…curr.input.matchAll(curr[0])]//这告诉我有多少个0、1等。
const bChar=b.charAt(curr.index)//这告诉我在这些索引位置有哪些字母
const bb=[…b.matchAll(bChar)]//如果数组“bb”的长度不同,则该数组不匹配
如果(aa.length==bb.length){
/*控制台输出:
讨价还价
aa:
0:[“2”,索引:4,输入:“ba1122n”,组:未定义]
1:[“2”,索引:5,输入:“ba1122n”,组:未定义]
bb:
0:[“a”,索引:1,输入:“议价”,组:未定义]
1:[“a”,索引:4,输入:“议价”,分组:未定义]
*/
//匹配长度只能帮助缩小***部分不匹配的单词。
//如何将每个单词中每个字母的索引与
//每个占位符字符的每个索引???,并检查字母是否相互匹配***????
//对于任何数字0-9,是否有任何数量的持牌人?
}
}, [])
返回数组
}
console.log('forLoop',forLoop([]))
返回{match,results,error}
}
stringDiff(字,输入)

从我上面的评论中,我仍然不确定下一个提供的方法是否能够满足OP的目标

但是,如果它是从一个自定义替换/替换模式创建一个正则表达式,然后用这个正则表达式过滤一个单词列表(甚至可能捕获正确的字符),那么可以尝试下面的代码

但是它有一个限制;用于描述自定义占位符模式的数字范围从
1
限制到
9
(不包括零),因为这与正则表达式捕获组的定义/限制完全匹配(以及如何访问它们)

函数createRegexFromSubstitutePattern(模式){
//-将例如“ba1122n”转换为“/ba(\w)\1(\w)\2n”/`
//-将例如“1a1”变成“/”(\w)a\1/`
//-将例如“1b22a1”变成“/。(\w)b(\w)\2a\1/`
返回RegExp(
[1,2,3,4,5,6,7,8,9].reduce((regXString,占位符)=>
//以编程方式替换第一次出现的
//具有捕获组模式的任意数字(从1到9)
//对于单个单词字符。
regXString.replace(RegExp(占位符“,”),“(\\w)”,
//提供初始输入/模式作为起始值。
字符串(模式)
)
//替换任何进一步出现的数字(从1到9)
//通过与组索引匹配的反向引用模式。
.替换((/([1-9])/g),“\\$1”)
//用正则表达式通配符替换通配符占位符。
.替换((/\?/g),“),”;
}
常量单词列表=[
{单词:'便宜货',分数:1700},
{单词:'气球',分数:1613},
{单词:'堡垒',分数:1299},
{单词:'巴比伦',分数:634},
{单词:'基于',分数:425},
{单词:'巴松管',乐谱:371},
{单词:'baldwin',