2017-08-15 1 views
-1

Ich sah Skype tun dies mit ihren Bots, ist ihre Chat-randomisiert, um es menschlicher aussehen:Zeichenkette mit variabler Wörter dynamische Orte in JavaScript

{Hi|Hey|Hello}, my name is a bot. {It's|It is} very {awesome|dope|cool} to meet you! 

Und das Programm ersetzt die {} Teile mit einem Zufallswort von denen angegeben wird, zum Beispiel:

Hi, my name is a bot. It's very cool to meet you! 

ich darüber nachdachte, wie dies möglich ist, aber anders als jedes Wort in ein Array setzen, durch alle von ihnen läuft die Suche nach „{“ und „}“ und nachdem ich die Saite ersetzt hatte, konnte ich an nichts anderes mehr denken.

Sie alle sind sehr kreativ und ich bin sicher, es gibt eine andere, bessere Möglichkeit, dies zu tun.

+0

einige Code Post. Was hast du probiert? StackOverflow ist keine "Code für mich" -Site –

+1

Ich schrieb über den Code ein wenig, aber ich werde es in einer Sekunde teilen. –

+0

Obwohl ich sagte, der Code kann funktionieren, aber es wird nicht sehr effizient sein. Deshalb frage ich, ob jemand einen besseren Weg kennt. –

Antwort

2

Sie können regex Ihr Design zu erreichen, verwenden:

let s = '{Hi|Hey|Hello}, my name is a bot. {It\'s|It is} very {awesome|dope|cool} to meet you!'; 
console.log(s.replace(/\{(.+?)\}/g, (a, v) => { 
    let array = v.split('|'); 
    return array[Math.floor(Math.random() * array.length))]; 
}); 
+0

Ja! genau das, was ich gesucht habe. Ich wusste, dass es einen besseren und saubereren Weg gibt. Vielen Dank! –

0

Sie würden eine Reihe von möglichen Wörter werden soll, und eine zufällig jedes Mal, als solche wählen:

let greetings = ["Hi", "Hey", "Hello"]; 
let adjective = ["awesome", "dope", "cool"]; 
let phrase = `${greetings[Math.floor(Math.random()*greetings.length)]}, my name is a bot. It's very ${adjective[Math.floor(Math.random()*adjective.length)]} to meet you!` 

Diese Vorlage Literale verwendet.

0

Schreiben Sie eine Funktion, die die Zeichenfolge annimmt, sucht nach den Anfangs- und Endtrennzeichen ("{" und "}"), dann nehmen Sie diese Teilzeichenfolge und teilen sie auf eine Pipe ("|").

Ihre Funktion sollte die Zeichenfolge Spleiß und nur eines dieser Worte nehmen und Zusammen für jeden Satz setzen {Worte | wie | this}

+0

Ja, genau das würde ich tun, ich denke, das ist der einzige Weg haha ​​ –

0

const random = a => a[Math.floor(Math.random() * a.length)]; 
 

 
const input = "{Hi|Hey|Hello}, my name is a bot. {It's|It is} very {awesome|dope|cool} to meet you!"; 
 

 
console.log(input.replace(/{(.*?)}/g, (_, v) => random(v.split('|'))));

0
var str = "{Hi|Hey|Hello}, my name is a bot. {It's|It is} very {awesome|dope|cool} to meet you"; 

str = str.replace(/{([^}]+)}/g, function(p, m){ 
    var arr = m.split("|"); 
    return arr[~~(Math.random() * arr.length)]; 
}); 

console.log(str); // insert str into element. 
Verwandte Themen