Javascript 如何使用正则表达式查看字符串是否部分(或完全)匹配另一个字符串?

Javascript 如何使用正则表达式查看字符串是否部分(或完全)匹配另一个字符串?,javascript,node.js,Javascript,Node.js,我正在制作一个琐事系统,每次有新问题时,变量triviaA都会更改为更新的答案。我想知道如何使用正则表达式,这样如果triviaA='eagle'那么如果有人以eagle的形式提交了答案,但有一个小的拼写错误,if语句仍然会返回triviaA答案,而玩家的答案也会返回true 我是新来的正则表达式,请原谅我的错误。使用正则表达式实际上很难做到这一点。然而,在计算中有一个称为“编辑距离”的概念,它是衡量两个字符串“相似”程度的一种方法,并且有已知的算法来计算它。这意味着需要计算节点包:) 例如,有

我正在制作一个琐事系统,每次有新问题时,变量
triviaA
都会更改为更新的答案。我想知道如何使用正则表达式,这样如果
triviaA='eagle'
那么如果有人以
eagle
的形式提交了答案,但有一个小的拼写错误,if语句仍然会返回
triviaA
答案,而玩家的答案也会返回true


我是新来的正则表达式,请原谅我的错误。

使用正则表达式实际上很难做到这一点。然而,在计算中有一个称为“编辑距离”的概念,它是衡量两个字符串“相似”程度的一种方法,并且有已知的算法来计算它。这意味着需要计算节点包:)

例如,有一个恰当命名的Node包
编辑距离
:(注意:编辑距离有时被称为Levenshtein编辑距离,以最先研究它的人的名字命名。)

我将给出一个使用该软件包的示例;其他包的计算方法可能有所不同

两个字符串之间有三种类型的更改:插入,即在一个字符串中添加一个字符,而在另一个字符串中不添加字符;删除,其中一个字符在另一个字符中被删除;以及更新/替换,其中在字符串之间更改字母。使用“编辑距离”包,可以定义一个函数,该函数为每种类型的更改指定成本。然后调用包的levenshtein方法,将两个字符串和三个函数传递给它,然后它返回一个对象,该对象具有一个
distance
属性,即总分


假设代价函数返回非负值,分数为0表示两个字符串相同,数字越大表示差异越大。因此,您可以使用它将输入的值与正确的字符串进行比较,如果结果低于某个阈值,则将其接受为“正确的,不包括拼写错误”。

这实际上很难使用正则表达式。然而,在计算中有一个称为“编辑距离”的概念,它是衡量两个字符串“相似”程度的一种方法,并且有已知的算法来计算它。这意味着需要计算节点包:)

例如,有一个恰当命名的Node包
编辑距离
:(注意:编辑距离有时被称为Levenshtein编辑距离,以最先研究它的人的名字命名。)

我将给出一个使用该软件包的示例;其他包的计算方法可能有所不同

两个字符串之间有三种类型的更改:插入,即在一个字符串中添加一个字符,而在另一个字符串中不添加字符;删除,其中一个字符在另一个字符中被删除;以及更新/替换,其中在字符串之间更改字母。使用“编辑距离”包,可以定义一个函数,该函数为每种类型的更改指定成本。然后调用包的levenshtein方法,将两个字符串和三个函数传递给它,然后它返回一个对象,该对象具有一个
distance
属性,即总分


假设代价函数返回非负值,分数为0表示两个字符串相同,数字越大表示差异越大。因此,您可以使用它将输入的值与正确的字符串进行比较,如果结果低于某个阈值,则将其接受为“正确的,不包括拼写错误”。

您可以动态构建一个正则表达式,该正则表达式匹配所有可能的“错误”(错误/丢失/额外字母),并将其应用于源:

函数fuzzyContains(word,str){
设r=[];
for(设i=0;ilog(fuzzyContains('eagle','fly,eagly,fly'))
您可以动态构建一个正则表达式,匹配所有可能的“错误”(错误/缺失/额外字母),并将其应用于源:

函数fuzzyContains(word,str){
设r=[];
for(设i=0;iconsole.log(fuzzyContains('eagle','fly,eagly,fly'))
所以如果有人写
ewgle
它应该会找到
eagle
,对吗?你会如何定义一个小的拼写错误:相同的字母,但不同的单词,一个或两个额外的字母?是的!就像只允许一个拼写错误的字母@格奥尔基相信你正在寻找模糊匹配。这涉及到计算相似性分数等,因此我可能建议使用库,例如Fuse.js或fuzzyset.js这不是一个真正的正则表达式问题,而是一个soundex问题。看看这里->如果有人写
ewgle
它应该会找到
eagle
,对吗?你会怎么定义一个小的拼写错误:相同的字母,但不同的单词,一个或两个额外的字母?是的!就像只允许一个拼写错误的字母@格奥尔基相信你正在寻找模糊匹配。这涉及到计算相似度