2012-05-29 124 views
0

我在其中的html元素有名稱,如下一個HTML文件:,如何從一個模式改變屬性值到另一個

<input type="text" name="HCFA_DETAIL_SUPPLEMENTAL" value="" size="64" /> 

我的要求是重命名Java中的name屬性值命名約定如下:

<input type="text" name="hcfaDetailSupplemental" value="" size="64" /> 

由於有大量的這樣的元素,我想用regex來實現。任何人都可以建議我如何實現使用正則表達式?

+1

不要使用正則表達式來解析HTML。使用適當的庫。 – m0skit0

+0

或者使用一些XML解析器。 – Santosh

+0

實際上,它是一個velocity模板,其中嵌入了html標籤。那麼,html解析器是否也適用於vm模板呢?如果是的話,你能列出一些解析器的名字嗎?如果沒有,我只想把vm模板當作一個普通的文件來處理,文件解析器解析它並以字符串的形式返回它的內容。然後我想修改名稱屬性的值,並將內容重新寫入另一個文件。 –

回答

1

請勿使用正則表達式來查看HTML(爲什麼要使用here)。使用適當的框架(如HTML Parser)應該可以做到。

一系列的樣品可以幫助您開始使用here

1

使用jQuery獲取名稱,然後正則表達式替換所有_[a-z]匹配的字符串

$('input').each(function() { 
    var s = $(this).attr('name').toLowerCase(); 
    while (s.match("_[a-z]")) 
     s = s.replace(new RegExp("_[a-z]"), s.match("_[a-z]").toString().toUpperCase()); 
    $(this).attr('name', s); 
}); 
1

在使用正則表達式的HTML大多數情況下是不好的做法,但如果你必須使用它,那麼這裏是一個的解決方案。

因此,您首先可以在name =「XXX」屬性中找到文本。它可以通過使用這個正則表達式(?<=name=")[a-zA-Z_]+(?=")完成。當你找到它時,用「」替換「_」,不要忘記把小寫字母小寫。現在,您可以使用之前使用的相同正則表達式替換舊值。

這應該做的伎倆

String html="<input type=\"text\" name=\"HCFA_DETAIL_SUPPLEMENTAL\" value=\"\" size=\"64\"/>"; 

String reg="(?<=name=\")[a-zA-Z_]+(?=\")"; 
Pattern pattern=Pattern.compile(reg); 
Matcher matcher=pattern.matcher(html); 
if (matcher.find()){ 
    String newName=matcher.group(0); 
    //System.out.println(newName); 
    newName=newName.toLowerCase().replaceAll("_", ""); 
    //System.out.println(newName); 
    html=html.replaceFirst(reg, newName); 
} 
System.out.println(html); 
//out -> <input type="text" name="hcfadetailsupplemental" value="" size="64"/> 
相關問題