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 中没有的事情...
我有一个包含输入和输出基本示例的文件:
[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 中没有的事情...