2016-01-28 38 views
0

我有一個JavaScript函數,看起來像這樣:JavaScript的替換 - 轉換BR標籤,將新行

function onAfterTranslate(item, translator) { 
var thing = item.translated_text; 
document.myform.keywords.value = "Translated Text:\r\n\r\n" + thing.replace(/<br>/g, "\r\n"); 
} 

命名項目的參數是一個對象,其中包括一個名爲translated_text的屬性。

這些都是這個變量的內容:

mono <br> toro <br> gato <br> perro <br> elefante 

我想要做的就是轉換br標籤換行符。 (理想情況下,它應該立即在br標籤之前和之後尋找可選​​空間,並且它也應該接受存在的br標籤的任何有效格式,但此刻並不重要)。

但是,替換上述代碼中的命令不起作用,我無法弄清楚爲什麼。

如果我刪除了replace命令,以便行以變量名結尾,那麼它的行爲與預期的一樣,用正確的值更新表單中的textarea框。

即使我嘗試用星號替換字母「o」,它仍然不起作用,這表明我在這裏做了一些根本性的錯誤。

有什麼建議嗎?

+0

根據你說什麼症狀代碼「不工作」? –

+0

基於replace命令的輸出與輸入相同的事實,所以br標籤仍然存在。 – Mark

回答

1

嘗試

var text = "mono <br> totono <br> gato <br> elefante" 
console.log(text.split("<br>").join("\n")); 

和修剪空格

text.split("<br>").map(function(val){ return String(val).trim(); }).join("\n"); 

爲把這個在一個textarea

document.body.innerHTML += "<textarea>" + text.split("<br>").map(function(val){ return val.trim() }).join("\n") + "</textarea>" ; 
3

您可以使用\s尋找空間和?爲「先前的字符可能會出現一次或不出現「。正則表達式在這裏。這裏下面

/\s?(<br\s?\/?>)\s?/g 

與所有可能的BR標籤的例子:<br><br /><br/>與之間的一些空間。

var input = document.getElementById('input').value; 
 
console.log(input); 
 
document.getElementById('output').value = input.replace(/\s?(<br\s?\/?>)\s?/g, "\r\n");
textarea { 
 
    width: 400px; 
 
    height: 100px; 
 
}
<h3>input</h3> 
 
<textarea id="input"> 
 
fooo <br> bar <br> lorum ipsum dolor. 
 
valar durum <br /> kel alar fol <br /> durom <br />. 
 
a bread of kebab is tasteful !<br/> 
 
EOL 
 
</textarea> 
 
<hr /> 
 
<h3>output</h3> 
 
<textarea id="output"></textarea>

0

所以,原來的替換功能基本上是罰款(但現在增強感謝你的貢獻) - 這是這不是我所期待的輸入數據的格式。我認爲變量item.translated_text是一個數組元素(因爲當我將它回顯到屏幕上時,我看到了我期待的值),但事實證明它實際上是一個數組,因爲我發現它是一個數組,我顯示了變量的長度,發現它只有1.我現在懷疑item變量是一個JSON構造,而不是一個常規數組,我首先想到的。

對不起,如果我浪費任何人的時間在這個。