我一直在尝试编写一个正则表达式,以更正电子书文件名中作者名称后的错误deliminator。在Javascript中使用文件重命名器。
这就是我目前所拥有的:
演示在这里
^(.*?)b(- | --| -- |-- | -)b
每个文件名中的第一个deliminator应该是"-"这些是我试图纠正的类型:
Author Name -Series 00 -Title.txt
Author_Name --Series 01 -Title -Genre.txt
File_Name1-- Sometext- more-info (V1.0).txt
Joe Bloggs- Blah
David Cay-Johnston -- Free Lunch.rtf
--------------不匹配---------------
Jackie S. Newton-Paines - Blah- The Biography.epub
Fred Bloggs - Series - title.txt
如果我将正则表达式更改为:
^(.*?)b(- | --| -- |-- | -| - )b
带REPLACE:
"$1 - "
然后它就工作了,但不允许我看到预览中要做什么更改,因为它会将每个"-"更改为"-"。(我使用替换"!$1-",然后在预览时排序,看看在应用之前要做什么更改)
有没有一种方法可以停止正则表达式匹配"-"和之后的任何内容,这样我就可以预览更改了?谢谢
本质上,您不希望前缀(.*?)
包含字符串-
-对吗?
好吧,您可以通过使用负前瞻来匹配字符串-
开头的"任何字符".
来确保情况就是这样。具体来说,将(.*?)
替换为((?! - ).)*?
。
然后,您的完整正则表达式应该是:^(((?! - ).)*?)b(- | --| -- |-- | -)b