2017-07-23 6 views
0

Hallo Ich habe einen Text so etwas wie „Willkommen zurück @@ Vorname Nachname @@. Sie das letzte Mal @@ Datum zugegriffen“Javascript ersetzen Token mit String geteilt

Mein Ziel ist es, diese Token mit tatsächlichen zu ersetzen Werte.

Also, was ich tat, war

var str = "Welcome back @@Firstname @@Lastname. You Last accessed on @@Date; 
var data = str.split('@'); 

Meine Idee war - wenn ich dies tun, meine Daten wie ein Array von Werten etwas

["Welcome back", "@FirstName" , "@LastName", "You Last accessed on" , "@Date"] 

Sobald ich das habe, kann ich leicht Ersetzen Sie die Token, weil ich weiß, welche Eigenschaften und welche eine statische Zeichenfolge sind. Aber ich bin dumm, seit JS andere Ideen hat. es spaltete es stattdessen als:

["Welcome back ", "", "Firstname ", "", "Lastname. You Last accessed on ", "", "Date"] 

Was mache ich falsch? oder was ist der beste Weg, Token in einer Zeichenfolge zu ersetzen?

Ich sah here. Mochte die Annäherung nicht sehr. Kein Fan von geschweiften Klammern. möchte er die „@“ Art und Weise tun - Da es für Content-Autoren leicht sein wird

+0

Split wird auf jeden @ in der Zeichenfolge aufgeteilt –

+0

* Mein Ziel ist es, diese Token durch tatsächliche Werte zu ersetzen. * - Ich würde denken, dass Sie '.replace' lieber als' .split' möchten – James

Antwort

2

Eine weitere regex Option, Split auf /@(@\w+)[^\[email protected]]+/, fängt den Namensteil, während das erste @ Abwerfen, vorausgesetzt, der Name Bezeichner werden immer aus Wortzeichen gemacht:

var str = "Welcome back @@Firstname @@Lastname. You Last accessed on @@Date;" 
 
var data = str.split(/@(@\w+)[^\[email protected]]+/); 
 
console.log(data.filter(s => s !== ""));

-3

Diese Mitteilung:

data = str.replace("@@Firstname", "Robert").replace("@@Lastname","Polson").replace('@@Date','yesterday') ; 
2

Sie "@" Zeichen aufteilen, die durch "@" Zeichen gefolgt werden

var str = "Welcome back @@Firstname @@Lastname. You Last accessed on @@Date"; 
 

 
var res = str.split(/@([email protected])/); 
 

 
console.log(res);

+0

Große Antwort. Hatte keine Ahnung, dass Sie auf Regex teilen könnten – m0meni

+0

Die 'RegExp' kann auch als'/[^ @] @/' – guest271314

+0

Super .. Vielen Dank :). Stimme mit @ AR7 überein. Ich wusste nie von der Trennung durch Regex. Ich kann das als Antwort für weitere 8 Minuten nicht akzeptieren. Werde es danach tun :) –

0

Da Ihre delemerers mit einem Leerzeichen enden, kann durch Leerzeichen getrennt werden:

.split(" ") 

Und dann durchlaufen und alle Wörter ersetzen mit @@ beginnen

var replaceBy={ 
lastname:"Doe", 
name:"John" 
} 

var result= input.split(" ").map(function(word){ 
if(word[0]=="@" && word[1]=="@"){ 
    return replaceBy[word.substr(2)] || "error"; 
} 
return word: 
}).join(" "); 

Allerdings könnte es einfacher sein, Ihre Bezeichner mit delemiters suround zB:

Hi @@[email protected]@! 

So können Sie tun

.split("@@") 

Und jedes zweite Element ist automatisch eine Kennung.

+0

Das stimmt leider nicht. Während es im obigen Beispiel wahr ist, könnte ich einen Satz wie "Welcome @@ Firstname, @@ Lastname" haben. @@ ist das einzige Token, von dem ich sicher bin –

+0

@night monger, aber dann ist es schwierig, den Identifizierer z.B. in Ihrem Beispiel ist es * Datum * oder * Datum; *? –

+0

das war ein Tippfehler. die tatsächliche Zeichenfolge war "Willkommen zurück @@ Vorname @@ Nachname. Sie zuletzt am @@ Datum zugegriffen"; Die Token werden immer ein eigenes Wort sein. –

0

Sie können das '@@' durch ein Zeichen ersetzen, gefolgt von '@' wie ', @' und ersetzen Sie dann das neue Zeichen.

var str = "Welcome back @@Firstname @@Lastname. You Last accessed on @@Date"; 
 
var data = str.replace(/@@/g, ',@').split(','); 
 
console.log(data);