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

时间:2015-04-18 05:31:51

标签: javascript regex file string-matching

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

[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()和许多其他东西中分割。我将管理不区分大小写。任何帮助将不胜感激。

1 个答案:

答案 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 ...