正则表达式 - 从字符的第 N 次出现到字符串结尾匹配
Regex - match from N-th occurence of a character till end of string
这里有点生气 :) 因为这一定很简单,我就是无法破解它。
示例:
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 个“_”(下划线字符),select 它和后面的所有内容,直到字符串结尾
- 什么都不替换(基本上删除第6个下划线到字符串末尾)
我使用 Sublime Text 进行所有文本编辑,具有 Find/Replace 功能,但如有必要,我可以使用一些在线工具(有什么建议吗?)。您可能已经猜到,这些是我们经常需要修改的横幅文件名,一次修改数百个。
非常感谢!
P.S。我可以编写简单的 JS,所以如果必须的话,也许这也是一个选项。
^((?:[^_]*_){5}[^_]*).*$
您可以通过 </code> 或 <code>
尝试 this.Replace。查看演示。
我认为您需要一个类似 Perl 的 Sublime 文本正则表达式:
\b(?:[^_]*_){5}[^_]*\K(.*)\b
这里是demo.
它捕获:
_AS2_10K.html
_AS2_10K.swf
_160K_w1020.jpg
如果您确定字符串中至少有 6 个 _:
src.match (/^((?:[^_]*_){5}[^_]*)(_[^]*)$/)[1]
'HTZ_2015_CS_SS5_cncenter_1020x200_AS2_10K.html'.匹配 (/^((?:[^]*){5}[^]*)([^]*)$/)[1] == 'HTZ_2015_CS_SS5_cncenter_1020x200'
否则使用:
(src.match (/^((?:[^_]*_){5}[^_]*)(_[^]*)$/) || [,src])[1]
这里有点生气 :) 因为这一定很简单,我就是无法破解它。
示例:
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 个“_”(下划线字符),select 它和后面的所有内容,直到字符串结尾
- 什么都不替换(基本上删除第6个下划线到字符串末尾)
我使用 Sublime Text 进行所有文本编辑,具有 Find/Replace 功能,但如有必要,我可以使用一些在线工具(有什么建议吗?)。您可能已经猜到,这些是我们经常需要修改的横幅文件名,一次修改数百个。
非常感谢!
P.S。我可以编写简单的 JS,所以如果必须的话,也许这也是一个选项。
^((?:[^_]*_){5}[^_]*).*$
您可以通过 </code> 或 <code>
尝试 this.Replace。查看演示。
我认为您需要一个类似 Perl 的 Sublime 文本正则表达式:
\b(?:[^_]*_){5}[^_]*\K(.*)\b
这里是demo.
它捕获:
_AS2_10K.html
_AS2_10K.swf
_160K_w1020.jpg
如果您确定字符串中至少有 6 个 _:
src.match (/^((?:[^_]*_){5}[^_]*)(_[^]*)$/)[1]
'HTZ_2015_CS_SS5_cncenter_1020x200_AS2_10K.html'.匹配 (/^((?:[^]*){5}[^]*)([^]*)$/)[1] == 'HTZ_2015_CS_SS5_cncenter_1020x200'
否则使用:
(src.match (/^((?:[^_]*_){5}[^_]*)(_[^]*)$/) || [,src])[1]