Javascript 正则表达式-匹配搜索字符串中单词的较好部分

Javascript 正则表达式-匹配搜索字符串中单词的较好部分,javascript,regex,Javascript,Regex,我正在使用Javascript,目前正在寻找一种方法来匹配尽可能多的模式字母,保持原始顺序 例如,搜索模式queued应针对以下任何搜索字符串返回marchQueue/Queue: queueTable scheduledQueueTable qScheduledQueueTable 到目前为止,我已经做到了这一点: var myregex = new RegExp("([queued])", "i"); var result = myregex.exec('queueTable'); 但

我正在使用Javascript,目前正在寻找一种方法来匹配尽可能多的模式字母,保持原始顺序

例如,搜索模式
queued
应针对以下任何搜索字符串返回march
Queue
/
Queue

  • queueTable

  • scheduledQueueTable

  • qScheduledQueueTable

到目前为止,我已经做到了这一点:

var myregex = new RegExp("([queued])", "i");
var result = myregex.exec('queueTable');
但它似乎不能正常工作,因为它突出显示了单词
末尾的单个字符
q
u
u
e
e


有什么想法吗?

我认为逻辑应该是这样的:

按此顺序匹配尽可能多的这些字母

我想到的唯一真正的答案是,如果可能的话,让比赛继续进行,但允许它退出。在这种情况下

myregex = /q(?:u(?:e(?:u(?:e(?:d|)|)|)|)|)/;
当然,您可以生成以下内容:

function matchAsMuchAsPossible(word) { // name me something sensible please!
    return new RegExp(
        word.split("").join("(?:")
        + (new Array(word.length).join("|)"))
    );
}

我认为逻辑应该是这样的:

按此顺序匹配尽可能多的这些字母

我想到的唯一真正的答案是,如果可能的话,让比赛继续进行,但允许它退出。在这种情况下

myregex = /q(?:u(?:e(?:u(?:e(?:d|)|)|)|)|)/;
当然,您可以生成以下内容:

function matchAsMuchAsPossible(word) { // name me something sensible please!
    return new RegExp(
        word.split("").join("(?:")
        + (new Array(word.length).join("|)"))
    );
}

请尝试以下操作:

var myregex=/queued?\B/g;
var result=myregex.exec('queueTable');

控制台日志(结果)尝试以下操作:

var myregex=/queued?\B/g;
var result=myregex.exec('queueTable');
控制台日志(结果)使用可以使用方法生成正则表达式模式的部分生成正则表达式

var myregex=new RegExp(“排队”
.拆分(“”)
.reduceRight(函数(str,s){
返回“(?:”+s+str+)?”;
}“我”;
var result=myregex.exec('queueTable');
log(result)
生成正则表达式,其中包含可以使用方法生成正则表达式模式的部分

var myregex=new RegExp(“排队”
.拆分(“”)
.reduceRight(函数(str,s){
返回“(?:”+s+str+)?”;
}“我”;
var result=myregex.exec('queueTable');

log(result)
您使用的是方括号-这意味着它将匹配其中列出的任何字符的单个实例

有几种方法可以解释您的意图:

您希望将单词队列与末尾的可选“d”匹配:

var myregex = new RegExp("queued?", "i");
var result = myregex.exec('queueTable');
注意这可能会更短,请尝试以下操作:
'queueTable'.match(/queued?/i)

我还删除了括号,因为它们没有在这里添加任何内容


此链接提供了一些很好的示例,可以进一步帮助您:

您使用的是方括号-这意味着它将匹配其中列出的任何字符的单个实例

有几种方法可以解释您的意图:

您希望将单词队列与末尾的可选“d”匹配:

var myregex = new RegExp("queued?", "i");
var result = myregex.exec('queueTable');
注意这可能会更短,请尝试以下操作:
'queueTable'.match(/queued?/i)

我还删除了括号,因为它们没有在这里添加任何内容


此链接提供了一些很好的示例,可以进一步帮助您:

当您在正则表达式中使用[]时,表示您希望匹配括号内的任何字符

示例:如果我使用
[abc]
它的意思是“匹配一个字符,这个字符可以是‘a’、‘b’或‘c’”

因此,在您的代码中,
[queued]
表示“匹配一个字符,该字符可以是'q'、'u'、'e'或'd'”-请注意,'u'和'e'出现两次,因此在本例中它们是多余的。这就是为什么这个表达式只匹配一个字符


如果要匹配整个字符串“queued”,只需删除括号。但在这种情况下,它将不匹配,因为queueTable没有“d”。如果希望“d”是可选的,可以使用前面的答案中已经解释过的
排队?

在正则表达式中使用[]时,表示希望匹配括号内的任何字符

示例:如果我使用
[abc]
它的意思是“匹配一个字符,这个字符可以是‘a’、‘b’或‘c’”

因此,在您的代码中,
[queued]
表示“匹配一个字符,该字符可以是'q'、'u'、'e'或'd'”-请注意,'u'和'e'出现两次,因此在本例中它们是多余的。这就是为什么这个表达式只匹配一个字符


如果要匹配整个字符串“queued”,只需删除括号。但在这种情况下,它将不匹配,因为queueTable没有“d”。如果您希望“d”是可选的,您可以使用
排队?
,正如前面的答案中已经解释的那样。

是否
q(u(e(u(ed?)?)?
做您想做的事?@Rawing事实上没有
queued
应该是一个未知变量,我需要能够匹配其中更好的部分。因此,如果单词是
foobar
,搜索字符串是
foobredtable
,我需要在
foobar
中进行匹配。如果您尝试匹配的单词是动态的,显然您必须从中动态创建一个模式。这是没有办法的。你的问题有点让人困惑-你是否试图在文本“queueTable”中找到文本“queued”-如果是这样,这将永远不可能-你的意思是“queuedTable”?
q(e(e)(u(ed?)?)做你想做的吗?
做你想做的吗?@Rawing事实上不是
queued
应该是一个未知变量,我需要能够匹配其中更好的部分。因此,如果单词是
foobar
,搜索字符串是
foobredtable
,我需要在
foobar
中进行匹配。如果您尝试匹配的单词是动态的,显然您必须从中动态创建一个模式。没有办法。你的问题有点让人困惑-你是在“queueTable”文本中查找“queued”文本吗