我正在使用 Javascript,目前正在寻找一种方法来匹配尽可能多的模式字母,同时保持原始顺序..
例如,搜索模式 queued
应该针对以下任何搜索字符串返回 march Queue
/queue
:
queueTable
scheduledQueueTable
qScheduledQueueTable
到目前为止,我已经做到了这一点:
var myregex = new RegExp("([queued])", "i");
var result = myregex.exec('queueTable');
但它似乎无法正常工作,因为它突出显示了单个字符 q
,u
,e
,u
、e
和 e
在单词 Table
的末尾。
有什么想法吗?
最佳答案
用 optional 生成正则表达式non-capturing group可以使用 Array#reduceRight
生成正则表达式模式的部分方法。
var myregex = new RegExp("queued"
.split('')
.reduceRight(function(str, s) {
return '(?:' + s + str + ')?';
}, ''), "i");
var result = myregex.exec('queueTable');
console.log(result)
该方法生成正则表达式:/(?:q(?:u(?:e(?:u(?:e(?:d?)?)?)?)?)?)?/
更新:如果您想获得第一个最长的匹配项,请在正则表达式中使用 g
修饰符并使用 Array#reduce
找出最大的匹配项方法。
var myregex = new RegExp(
"queued".split('')
.reduceRight(function(str, s) {
return '(?:' + s + str + ')?';
}, ''), "ig");
var result = 'qscheduledQueueTable'
.match(myregex)
.reduce(function(a, b) {
return a.length > b.length ? a : b;
});
console.log(result);
关于javascript - 正则表达式 - 匹配搜索字符串中单词的较好部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42454823/