2014-11-20 80 views
-1

好球員提取部分文件或「/」,如果它不存在

這裏是我的2串 D:/path/to/project/js/folder/LVL1/LVL2/mylibrary.jsD:/path/to/project/js/folder/mylibrary.js

第一個我想/LVL1/LVL2 和 第二我希望得到一個斜線/

這裏是我的正則表達式^.+js\/folder(\/[^\.]*[^\/])\/.+\.js+$

它工作正常,爲第一,但沒有返回第二

這是一個Ant任務(更具體的jscomp)使用。基本上我想編譯'D:/ path/to/project/js/folder /'中的每個JavaScript文件,並將輸出放在其他地方與嵌套文件夾。這是我的螞蟻任務的摘錄,如果它有幫助。

<target name="compileJS" description="minifier les fichier JS"> 
    <taskdef name="jscomp" 
      classname="com.google.javascript.jscomp.ant.CompileTask" 
      classpath="${lib.dir}/thirdparty/closure-compiler/compiler.jar" /> 
    <taskdef resource="net/sf/antcontrib/cpptasks/antlib.xml"> 
     <classpath> 
      <pathelement location="${lib.dir}/thirdparty/ant-contrib/cpptasks.jar" /> 
     </classpath> 
    </taskdef> 

    <echo message="Searching for files in ${basedir}\charte\js" /> 
    <for param="filename"> 
     <path> 
      <fileset dir="${basedir}/charte/js"> 
      </fileset> 
     </path> 
     <sequential id="i"> 
      <!-- This gets the filename without the directory path. --> 
      <basename property="[email protected]{filename}" file="@{filename}" /> 


      <propertyregex property="file" 
          input="@{filename}" 
          regexp="\\" 
          replace="/" 
          override="true" 
          defaultvalue="@{filename}" /> 

      <echo message=">...>...> input = ${file}"/> 

      <propertyregex property="[email protected]{filename}" 
       input="${file}" 
       regexp="^.+js\/folder(\/[^\.]*[^\/])\/.+[\.js]+$" 
       select="\1" 
       casesensitive="false" override="true" /> 
      <echo message=">...>...> directory = ${[email protected]{filename}}"/> 

      <echo message="Compressing file ${[email protected]{filename}} in ${[email protected]{filename}}" /> 

      <jscomp compilationLevel="simple" 
       output="${build.dir}/charte/js/[email protected]{filename}/${[email protected]{filename}}"> 

       <sources dir="${base.dir}/charte/js/[email protected]{filename}/"> 
        <file name="${[email protected]{filename}}" /> 
       </sources> 

      </jscomp> 


     </sequential> 
    </for> 
</target> 

感謝

回答

0

,你可以使用這個模式

^.+js\/folder(\/|.*?)[^\/]+?\.js$ 

Demo

^    # Start of string/line 
.    # Any character except line break 
+    # (one or more)(greedy) 
js    # "js" 
\/    # "/" 
folder   # "folder" 
(    # Capturing Group (1) 
    \/   # "/" 
    |    # OR 
    .    # Any character except line break 
    *?   # (zero or more)(lazy) 
)    # End of # Capturing Group (1) 
[^\/]   # Character not in [^\/] 
+?    # (one or more)(lazy) 
\.    # "." 
js$    # End of string/line 
+0

謝謝你的最簡版:) – Nani 2014-11-21 10:03:59

0

沒有Ant可用。依靠RegEx101。
您的正則表達式似乎捕獲相同的一個較短的版本:^.+js\/folder(\/[^\.]*)\/.+\.js+$
雖然(RegEx101中)都不匹配第二個字符串。 RegEx101

體改較短的版本略有^.+js\/folder(\/)([^\.]*\/)*.+\.js+$同時匹配字符串,返回預期,如果正在使用的兩個反向引用:
RegEx101

如果螞蟻需要調整,請評論。

+0

謝謝你投票支持正則表達式:) euh:/我不能投票 – Nani 2014-11-21 10:04:28

+0

@Nani謝謝,我會考慮它。保重。 – Abecee 2014-11-21 13:38:17

相關問題