[英]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.