热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

仅替换全局正则表达式的第一个匹配项

如何解决《仅替换全局正则表达式的第一个匹配项》经验,是哪儿的问题?

我正在编写一个函数来递归替换字符串中正则表达式的匹配.替换可以是一个函数,就像vanilla一样.replace,此函数可以通过其中一个参数访问原始字符串.

我希望我的函数在每次迭代时只替换一个匹配.对于非全局正则表达式,情况总是如此.但是,此函数接收的一些正则表达式将是全局的.做一个传统.replace(regex, replacement)意味着它可以在每次迭代中多次替换,不仅搞乱处理匹配的顺序,而且还将不正确的索引和原始字符串传递给替换函数.

举个例子:

function recursiveReplace(string, regex, replacement) {
  for (var i = 1e8; i > 0 && regex.test(string); i--)
    string = string.replace(regex, replacement);
  return string;
}

console.log(
  recursiveReplace("abcdef", /../g, function (match, index, original) {
    console.log(original);
    return match[0];
  })
);

这输出

abcdef
abcdef
abcdef
ace
ae
a

当所需的输出是

abcdef
acdef
adef
aef
af
a

我怎样才能让函数在每次迭代时只处理一个匹配,无论正则表达式是否有g标志?请注意,我正在以这样的方式使用该函数,即第二个参数将始终是正则表达式(我无法控制它,也无法控制所述正则表达式是否具有该g标志).


推荐阅读
author-avatar
手机用户2502881923
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有