正则表达式 - 匹配从第N个字符出现到字符串结尾

时间:2015-04-01 12:46:55

标签: javascript regex sublimetext2

这里有点生气:)因为这一定很简单,我只是不能破解它。

示例:

HTZ_2015_CS_SS5_cncenter_1020x200_AS2_10K.html
HTZ_2015_CS_SS5_cncenter_1020x200_AS2_10K.swf
HTZ_2015_CS_SS5_cncenter_1500x1000_160K_w1020.jpg
  • 匹配第6" _" (下划线字符),选择它和随后的所有内容,直到字符串结尾
  • 替换为空(基本上从第6个下划线删除到字符串的结尾)

我使用Sublime Text进行所有文本编辑,使用查找/替换功能,但如有必要,我可以使用一些在线工具(任何建议?)。您可能已经猜到这些是我们经常需要修改的横幅文件名,一次有数百个。

非常感谢!

P.S。我可以写简单的JS,所以如果必须的话,也许这也是一个选择。

3 个答案:

答案 0 :(得分:1)

^((?:[^_]*_){5}[^_]*).*$

您可以通过$1\1尝试此操作。请参阅演示。

https://regex101.com/r/sJ9gM7/36

答案 1 :(得分:0)

我认为你需要一个类似Perl的正则表达式用于Sublime文本:

\b(?:[^_]*_){5}[^_]*\K(.*)\b

这是demo

它捕获:

_AS2_10K.html
_AS2_10K.swf
_160K_w1020.jpg

答案 2 :(得分:0)

如果您确定字符串中至少有6个_

   src.match (/^((?:[^_]*_){5}[^_]*)(_[^]*)$/)[1]

' HTZ_2015_CS_SS5_cncenter_1020x200_AS2_10K.html' .match(/ ^((?:[^ ] * ){5} [^ ] *)( [^] *)$ /)[1] ==' HTZ_2015_CS_SS5_cncenter_1020x200'

否则使用:

  (src.match (/^((?:[^_]*_){5}[^_]*)(_[^]*)$/) || [,src])[1]