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