Javascript 使用给定格式从字符串中提取数据

Javascript 使用给定格式从字符串中提取数据,javascript,Javascript,作为一名最近转向JS的python程序员,我使用了一个名为 “解析”。 您提供了一个字符串模板和实际字符串,它将返回所需的数据。例如: parse("It's {}, I love it!", "It's spam, I love it!") 将返回垃圾邮件 我一直在寻找解决此问题的JS解决方案,除此之外,我找不到任何解决方案: 我已经试过了,但效果不太好。 提前感谢您,GoldPython您可以通过使用RegExp实现这一点 首先,您需要转义在RegExp中具有特殊含义的字符: var t

作为一名最近转向JS的python程序员,我使用了一个名为 “解析”。 您提供了一个字符串模板和实际字符串,它将返回所需的数据。例如:

parse("It's {}, I love it!", "It's spam, I love it!")
将返回
垃圾邮件

我一直在寻找解决此问题的JS解决方案,除此之外,我找不到任何解决方案:

我已经试过了,但效果不太好。
提前感谢您,GoldPython

您可以通过使用RegExp实现这一点

首先,您需要转义在RegExp中具有特殊含义的字符:

var toMatch = "I don't understand it, but: It's spam, I love it! I really really love it!";
var pattern = "It's {}, I love {}!";

function pythonParse(pattern, toMatch, bShortest) {
   pattern = pattern.replace(/\\/g,"\\\\");
   pattern = pattern.replace(/\$/g, "\\$");
   pattern = pattern.replace(/\^/g, "\\^");
   pattern = pattern.replace(/\(/g, "\\(");
   pattern = pattern.replace(/\)/g, "\\)");
   pattern = pattern.replace(/\[/g, "\\[");
   pattern = pattern.replace(/\]/g, "\\]");
   pattern = pattern.replace(/\%/g, "\\%");
   pattern = pattern.replace(/\?/g, "\\?");
   pattern = pattern.replace(/\:/g, "\\:");
   pattern = pattern.replace(/\//g, "\\/");
   pattern = pattern.replace(/\*/g, "\\*");
   pattern = pattern.replace(/\./g, "\\.");
   pattern = pattern.replace(/\+/g, "\\+");
   pattern = pattern.replace(/\|/g, "\\|");

   var lazy = "";
   if(bShortest)
     lazy = "?";

   // Replace the parse pattern {} with (.*) regex pattern
   pattern = pattern.replace(/\{\}/g, "(.*" + lazy + ")");

   // Then you can use this pattern to retrieve the result
   var matches = toMatch.match(new RegExp(pattern));
   // Count results
   if(!matches)
     return "";
   if(matches.length > 2) {
     matches.shift();
     return matches;
   }
   else
     return matches[1];
}  

var result = pythonParse(pattern, toMatch, true);
console.log(result);
请参见此处的工作示例:


编辑以允许使用可选的
bShortest
boolean参数进行延迟比较。

已找到正则表达式解决方案,谢谢:)

为什么它工作不好?向我们展示您的尝试您应该能够通过常规表达式实现您想要的功能Regexp呢?