我有一个包含输入和输出基本示例的文件:
[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.
我将得到一个没有标点符号的输入字符串。
示例:"你能否在一百万年后死去"
我正在尝试将输入与" =="左侧数据库的第一面相匹配。并返回该字符串与第一侧匹配的行的第二侧。 那么输入="你能否在一百万年内死去&#34 ;,输出="我不会死。我是软件。"
我必须使用原生JavaScript。这是我一直在努力的个人项目的一部分,并且在4个月内无法通过。它是独立自然语音引擎的一部分,可以下载文件,将其读取到变量,并将其用作参考。我尝试过循环遍历的组合,在" ==",str.match()和许多其他东西中分割。我将管理不区分大小写。任何帮助将不胜感激。
答案 0 :(得分:1)
您可以将其拆分为数组,并将每个左侧都设为正则表达式。
然后你可以运行测试的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]*?
执行.*?
应该做的但不是js ...