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.

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

示例:"can you ever die in a million years"

我正在尝试将输入与“==”左侧的数据库第一端匹配,return 字符串与第一端匹配的行的第二端匹配。 所以输入 = "can you ever die in a million years",输出 = "I can not die. I am software."

我必须使用原生 JavaScript。这是我一直在从事的个人项目的一部分,并且在 4 个月内未能通过。它是一个独立的自然语音引擎的一部分,可以下载文件,将其读入变量,并将其用作参考。我尝试了循环遍历、在“==”、str.match() 处拆分以及许多其他内容的组合。我将管理不区分大小写。任何帮助将不胜感激。

你可以把它拆分成一个数组,然后把每个左边都变成一个正则表达式。

然后您可以 运行 一系列测试来找到匹配项。 棘手的部分是您需要进行多项测试,而不仅仅是一个超级正则表达式。我使用 [].some() 在找到第一个匹配项后终止。您可以使用 filter 更改 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?"));

fiddle: https://jsfiddle.net/joaze5u6/1/

我还写了一个关于 js 捕获通配符方式的修复程序,[\w\W]*? 做了 .*? 应该做但在 js 中没有的事情...