2011-08-20 11 views
19

चींटी में, मेरे पास 'some_property' नाम की एक संपत्ति है, और मान लें कि इसका मान "hello" है।अपरकेस, लोअरकेस, एक चींटी संपत्ति को कैपिटल करें

मैं कोशिश कर रहा हूँ एक अपर-केस के रूप में इस संपत्ति के मूल्य ("हैलो") के साथ एक पाठ फ़ाइल अंदर एक जगह धारक की जगह।
तो, मैं इस कार्य है:

<replaceregexp match="SOME_PLACE_HOLDER" replace="${some_property}" byline="true"> 

और मैं यह काम करने के लिए के रूप में अगर मैं इस कार्य को होता हैं:

<replaceregexp match="SOME_PLACE_HOLDER" replace="HELLO" byline="true"> 

मैं बाहरी चींटी कार्यों बचना चाहते हैं (जैसे कि एंट-कॉन्ट्रिब के रूप में), इसलिए समाधान को शुद्ध रेगेक्स होना आवश्यक है - यह संभव होना चाहिए!

अपरकेस, लोअरकेस, और पूंजीकृत।

कोई भी सही regexes जानता है?

उत्तर

34

मैं समझता हूं कि आप चींटी एक्सटेंशन से बचना चाहते हैं, लेकिन रेगेक्स का उपयोग करके समाधान को लागू करने की बाधा थोड़ी तंग है - अगर निम्नलिखित झुकता है (ब्रेक?) जो बहुत अधिक नियम करता है।

इन दिनों जावास्क्रिप्ट इंजन के साथ चींटी जहाजों, इसलिए एंटी एक्सएमएल में कार्यान्वित करने के लिए समस्याग्रस्त कुछ भी आमतौर पर scriptdef में छिपाया जा सकता है। नीचे चार हैं जो मामला बदलते हैं।

आपके मामले में, आप अपने some_property संपत्ति ले और तार का एक uppercased संस्करण replaceregexp कार्य में उपयोग करने के लिए प्राप्त करने के लिए upper स्क्रिप्ट के माध्यम से इसे संसाधित होगा।

<scriptdef language="javascript" name="upper"> 
    <attribute name="string" /> 
    <attribute name="to" /> 

    project.setProperty(attributes.get("to"), 
         attributes.get("string").toUpperCase()); 
</scriptdef> 

<scriptdef language="javascript" name="lower"> 
    <attribute name="string" /> 
    <attribute name="to" /> 

    project.setProperty(attributes.get("to"), 
         attributes.get("string").toLowerCase()); 
</scriptdef> 

<scriptdef language="javascript" name="ucfirst"> 
    <attribute name="string" /> 
    <attribute name="to" /> 

    var the_string = attributes.get("string"); 
    project.setProperty(attributes.get("to"), 
       the_string.substr(0,1).toUpperCase() + the_string.substr(1)); 
</scriptdef> 

<scriptdef language="javascript" name="capitalize"> 
    <attribute name="string" /> 
    <attribute name="to" /> 

    var s = new String(attributes.get("string")); 
    project.setProperty(attributes.get("to"), 
      s.toLowerCase().replace(/^.|\s\S/g, 
      function(a) { return a.toUpperCase(); })); 
</scriptdef> 

उदाहरण उपयोग:

<property name="phrase" value="the quick brown FOX jUmped oVer the laZy DOG" /> 

<upper string="${phrase}" to="upper" /> 
<lower string="${phrase}" to="lower" /> 
<ucfirst string="${phrase}" to="ucfirst" /> 
<capitalize string="${phrase}" to="capitalize" /> 

<echo message="upper(${phrase})${line.separator}= '${upper}'" /> 
<echo message="lower(${phrase})${line.separator}= '${lower}'" /> 
<echo message="ucfirst(${phrase})${line.separator}= '${ucfirst}'" /> 
<echo message="capitalize(${phrase})${line.separator}= '${capitalize}'" /> 

और उत्पादन: implementation of the Capitalization के लिए पोनि और मार्को Demaio को

[echo] upper(the quick brown FOX jUmped oVer the laZy DOG) 
[echo] = 'THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG' 
[echo] lower(the quick brown FOX jUmped oVer the laZy DOG) 
[echo] = 'the quick brown fox jumped over the lazy dog' 
[echo] ucfirst(the quick brown FOX jUmped oVer the laZy DOG) 
[echo] = 'The quick brown FOX jUmped oVer the laZy DOG' 
[echo] capitalize(the quick brown FOX jUmped oVer the laZy DOG) 
[echo] = 'The Quick Brown Fox Jumped Over The Lazy Dog' 

धन्यवाद।

+0

0

आप SCriptdef और किसी भी सुविधाजनक भाषा के समान कुछ उपयोग कर सकते हैं।

<scriptdef language="javascript" name="upper"> 
<attribute name="string" /> 
<attribute name="to" /> 

project.setProperty(attributes.get("to"), 
        attributes.get("string").toUpperCase()); 
</scriptdef> 

यहाँ जावास्क्रिप्ट एक उदाहरण के रूप में उल्लेख किया है। आप किसी अन्य का भी उपयोग कर सकते हैं।

संबंधित मुद्दे