JavaScript正则expression式\ G +抵消等效

JavaScript正则expression式中有\G的等价物吗? 我需要匹配一个确切的偏移模式。 设置g标志和.lastIndex从给定的索引向前search,但不会精确匹配到偏移量。

XRegExp有这个y修饰符,这可能是我正在寻找,但它似乎不能在Node / V8中工作。

认为你唯一能做的就是把.lastIndex设置为你的出发点,用.exec()匹配,如果匹配,检查.lastIndex的更新值。 如果它等于你的起始位置加上比赛结果的长度,那么比赛就开始在你想要的地方。

所以:

 var re = /banana/g; re.lastIndex = 6; var mr = re.exec("hello banana"); if (mr[0].length + 6 === re.lastIndex) alert("good banana"); 

我永远不会说这是一种“好”的做事方式,而是我所知道的唯一可能性。

做了一些hackery:

 var XRegExp = require('xregexp').XRegExp; function makeOffsetPatt(patt, flags) { if(_.isUndefined(flags)) flags = 'gnsm'; return XRegExp('(?:'+patt+')|(?<__NO_MATCH>)', flags); } XRegExp.prototype.match = function(str, offset) { var result = XRegExp.exec(str, this, offset); if(result === null || !_.isUndefined(result.__NO_MATCH)) return null; delete result.__NO_MATCH; return result; }; var word = makeOffsetPatt('\\w+'); console.log(word.match('html { head {')); console.log(word.match('html { head {',4)); console.log(word.match('html { head {',7)); 

输出:

 [ 'html', index: 0, input: 'html { head {' ] null [ 'head', index: 7, input: 'html { head {' ] 

如果你的模式没有find,它会尝试匹配一个空string,而应该总是成功。 然后我检查这个空匹配的存在以确定你的模式是否失败,清理匹配对象并返回它。