简单的正则表达式问题(vim搜索/替换)

Ami*_*hum 0 regex vi vim

如何指定搜索中的字符串有多个选项?例如,我想找到既具有开始的任意组合jspPar,btnjspAtt以字母结尾K.

另外 - 我需要用字符串替换它,具体取决于原始前缀.例如,如果前缀是jspPar我需要用字母替换它P.(并且,让我们说,BAbtn和,jspAtt根据).

Ari*_*zis 5

\(jsPar\|btn\|jspAtt\)[^ \t]*K
Run Code Online (Sandbox Code Playgroud)

你在找什么?

\(jsPar\|btn\|jspAtt\)说"在这一点上,匹配任何这些替代物",然后[^ \t]*说"在这一点上,匹配的空格或标签字符的任何量(包括零)",和K当然的意思是"在这一点上匹配一个K".


对于您添加的问题,可以执行以下操作:

%s/\(jsPar\|btn\|jspAtt\)[^ \t]*\zsK/\=submatch(1) == 'jsPar' ? 'P' : submatch(1) == 'btn' ? 'B' : 'A' /g
Run Code Online (Sandbox Code Playgroud)

(\zs说"认为比赛已经开始了",所以只有"K"才会被替换.)

但是如果我必须在一次通过中进行替换,我只会这样做.否则我只跑三s///秒钟:

%s/jspAtt[^ \t]*\zsK/A/g
%s/jsPar[^ \t]*\zsK/P/g
%s/btn[^ \t]*\zsK/B/g
Run Code Online (Sandbox Code Playgroud)

给定命令历史记录,这更少打字,并且也不太可能需要调试,而在指定任何计算时,这始终是一种潜力.