2016-07-01 4 views
1

ich mit folgendem Problem habe Schwierigkeiten:Wie eine Zeichenfolge durch selektives Hinzufügen oder Entfernen von Zeichen mit Hilfe von Javascript zu transformieren

Können sagen, ich habe eine Zeichenfolge'foo.bar.baz'. Ich möchte es in foo[bar][baz]

verwandeln Gibt es eine nette Möglichkeit, dies mithilfe von JavaScript zu tun?

+2

Können Sie Ihren Versuch bis jetzt und eine Demonstration bekannt geben, um das Problem zu reproduzieren, das Sie haben? – elclanrs

+0

mit Regex können Sie dies leicht lösen. –

+0

Sie meinen es in einem Wörterbuch speichern? –

Antwort

3

Es ist einfach, mit split und join:

var arr = 'foo.bar.baz'.split('.'); 
arr.shift() + '[' + arr.join('][') + ']'; // "foo[bar][baz]" 
0

Ich nehme an, Sie versuchen, die Zeichenfolgen zu transformieren, die ein "." vor dem Text.

var str = 'foo.bar.baz'; 
var splittedArray = str.split('.'); 
var result = splittedArray[0]; 
for(var i = 1; i < splittedArray.length; i++) { 
result += '[' + splittedArray[i] + ']'; 
} 
0

einen regulären Ausdruck verwenden:

var str = 'foo.bar.baz'; 
str = str.replace(/\.([a-z]{3})/g, "[$1]"); 
+0

Ich glaube nicht, dass Länge 3 eine Voraussetzung ist. Betrachten Sie '/\.([^ .]*)/ g' – Oriol

+0

True. Ich bin mir auch nicht sicher. ^^ – Arnauld

1

Sie geben nicht genug Optionen über Grenzfälle (wie, was ist, wenn Sie eine einzelne Zeichenfolge, dh foo. Sollte das zurückgeben foo[] oder foo?).

So oder so hier ist mein Schuss auf diese Frage:

function greatFunc(txt) { 
    var ls = txt.split('.'); 
    if (ls.length === 1) { // edge case here! 
     return txt; 
    } 
    return ls[0] + '[' + ls.splice(1).join('][') + ']'; 
} 

greatFunc('foo.bar.baz') // foo[bar][baz] 
greatFunc('foo.bar.baz.kop.pop') // foo[bar][baz][kop][pop] 
greatFunc('foo') // foo or foo[] if you delete the if clause. 

Es gibt natürlich die Regex-Lösung, die von anderen erwähnen! Viel sauberer, meiner Meinung nach und viel schneller als jeder andere.

Verwandte Themen