Javascript正则表达式从语句中检索变量

Javascript正则表达式从语句中检索变量,javascript,regex,nlp,Javascript,Regex,Nlp,我想知道是否有可能用正则表达式或类似的方法从预定义的句子中提取一些变量 e、 g 如果这是模式 "How many * awards did * win in *?" 有人打了 "How many gold awards did johnny win in 2008?" 我怎么才能回来 ["gold","johnny","2008"] 我还想在检索变量之前返回它与模式匹配的事实,因为将有许多不同的模式。注意:某人也可以键入多个单词来代替*例如johnny english,而不仅仅是john

我想知道是否有可能用正则表达式或类似的方法从预定义的句子中提取一些变量

e、 g

如果这是模式

"How many * awards did * win in *?"
有人打了

"How many gold awards did johnny win in 2008?"
我怎么才能回来

["gold","johnny","2008"]
我还想在检索变量之前返回它与模式匹配的事实,因为将有许多不同的模式。注意:某人也可以键入多个单词来代替*例如johnny english,而不仅仅是johnny

谢谢

有关详细信息,请参阅

使现代化 看来你想在《2008年约翰尼·英格利什赢得多少金奖》中与《约翰尼·英格利什》相提并论。
这是正则表达式的更新版本:

/^How many (.+) awards did (.+) win in (.+)\?$/i
有关详细信息,请参阅

使现代化 看来你想在《2008年约翰尼·英格利什赢得多少金奖》中与《约翰尼·英格利什》相提并论。
这是正则表达式的更新版本:

/^How many (.+) awards did (.+) win in (.+)\?$/i

基于Derek的回答和SimpleCoder的评论,以下是完整的功能:

// This function escapes a regex string
// http://simonwillison.net/2006/jan/20/escape/
function escapeRegex(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

function match(pattern, text) {
    var regex = '^' + escapeRegex(pattern).replace(/\\\*/g, '(.+)') + '$';
    var query = text.match(new RegExp(regex, 'i'));
    if (!query)
        return false;

    query.shift(); // remove first element
    return query;
}

match("How many * awards did * win in *?", "How many gold awards did johnny win in 2008?");

基于Derek的回答和SimpleCoder的评论,以下是完整的功能:

// This function escapes a regex string
// http://simonwillison.net/2006/jan/20/escape/
function escapeRegex(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

function match(pattern, text) {
    var regex = '^' + escapeRegex(pattern).replace(/\\\*/g, '(.+)') + '$';
    var query = text.match(new RegExp(regex, 'i'));
    if (!query)
        return false;

    query.shift(); // remove first element
    return query;
}

match("How many * awards did * win in *?", "How many gold awards did johnny win in 2008?");

为了增加这一点,您可以通过将
*
字符替换为给定模式字符串的
([^\s]+)
来动态构建正则表达式。@SimpleCode-并将每个
更改为
Yep,以及其他特殊字符:)。为了稍微简化,
([^\s]+)
(\s+)相同
。为了增加这一点,您可以通过将
*
字符替换为给定模式字符串的
([^\s]+)
来动态构建正则表达式。@SimpleCode-并将每个
更改为
是的,以及其他特殊字符:)。为了稍微简化,
([^\s]+)
(\s+)相同
。天才!谢谢德里克和凯西。这些功能非常有用。我也在考虑将其移植到PHP。PHP中是否有类似的正则表达式特性?谢谢你!谢谢德里克和凯西。这些功能非常有用。我也在考虑将其移植到PHP。PHP中是否有类似的正则表达式特性?谢谢