繁体   English   中英

JavaScript中的反向正则表达式匹配

[英]Reverse Regular Expression Matching in Javascript

我有一个包含输入和输出基本示例的文件:

[Database.txt]
Hello*==Hello. How are you?
How*are*you*==I am fine I guess.
Can you*die*==I can not die. I am software.

我将得到一个没有标点符号的输入字符串。

例子:“你能死一百万年吗”

我试图将输入与“ ==”左侧的数据库的第一面进行匹配,并返回与第一面匹配的行的第二面。 因此,如果输入=“您能否在一百万年内死亡”,而输出=“我不能死。我就是软件。”

我必须使用本机JavaScript。 这是我一直在从事的个人项目的一部分,并且在4个月内未能完成。 它是独立自然语音引擎的一部分,该引擎可以下载文件,将其读取为变量并将其用作参考。 我尝试了循环遍历,在“ ==”,str.match()和其他很多东西上分割的组合。 我将处理不区分大小写的问题。 任何帮助将不胜感激。

您可以将其拆分为一个数组,并使每个左侧成为一个正则表达式。

那么您可以运行一个测试的guantlet来找到匹配项。 棘手的是,您需要进行多个测试,而不仅仅是一个超级正则表达式。 我使用[] .some()在找到第一个匹配项后终止。 您可以使用过滤器更改一些内容并收集输出以获取多个匹配项。

var gaunlet=[],
 str="[Database.txt]\n\
Hello*==Hello. How are you?\n\
How*are*you*==I am fine I guess.\n\
Can you*die*==I can not die. I am software.";

str.split("\n").forEach(function(a,b){
    var r=a.split("==");
    gaunlet[b]=[RegExp(r[0].replace(/\*/g,"[\\w\\W]*?"), "i"), r[1]];
});

function lookup(inp){
  var out;
    gaunlet.some(function(a){
        if(a[0].test(inp)) return out=a[1];
    });
  return out;
}


alert(lookup("can you die in a million years?"));

小提琴: https : //jsfiddle.net/joaze5u6/1/

我还写了一个关于js捕获通配符[\\w\\W]*?的修补程序[\\w\\W]*? .*?是什么.*? 应该应该做但是不在js中...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM