如何执行反向方向的全量文本替换操作
如何执行反向方向的全量文本替换
反向全量替换的核心规则很明确:仅对光标当前位置之前的所有文本执行匹配替换,光标位置及之后的文本完全不做改动,和常规全文替换、从光标往后替换的方向相反,正好匹配给出的示例效果:光标在第二行开头A的前方时,只有第一行属于替换范围,第二行内容完全保留原样。
自行实现的核心逻辑
如果是在自己的程序里实现这个功能,按4步走就不会出错:
- 拿到编辑区的完整文本,同时记录光标从文本起始位置算起的字符偏移量
- 把完整文本切为两段:偏移量之前是待替换段,偏移量及之后是保留段
- 仅对待替换段执行全量字符串替换,比如空格换下划线就直接做全局匹配替换
- 把替换完成的前半段和原封不动的保留段拼接后放回编辑区,把光标复位到两段拼接的原位置即可
拿示例走一遍流程:
- 光标在第二行开头,偏移量正好等于第一行文本加换行符的总长度
- 待替换段内容为
Reactive Patterns with RxJS.\n,执行空格替换后变为Reactive_Patterns_with_RxJS.\n - 保留段内容为
A practical guide.,不做任何修改 - 拼接后最终结果完全符合预期:
Reactive_Patterns_with_RxJS. A practical guide.
常见编辑器的快速操作方法
日常编辑不用自己写逻辑,用编辑器自带功能就能实现:
- VS Code:按住
Shift点击文本最开头,选中光标前的所有内容,按Ctrl+H(macOS端按Cmd+Opt+F)调出替换面板,在选中范围内执行全部替换即可 - Vim:按
v进入可视模式,按`[选中从光标位置到文件开头的所有内容,输入:s/ /_/g回车,就能完成选中范围的全局替换 - 通用文本编辑器(记事本、Word等):手动选中光标位置到文本开头的内容,再在选中范围内执行替换操作,就不会改动光标后的文本
内容的提问来源于stack exchange,提问作者albertkao9
相关产品推荐
相关产品推荐

