2017-11-27 6 views
1

Wie kann ich alle Zeichen in einer gegebenen Zeichenfolge mit * mit der replaceAll() Funktion ersetzen?Ersetzen Sie alle Zeichen in einer Zeichenfolge jquery

var words = ['marvel','computer','regex','throne']; 
 
var rand = words[Math.floor(Math.random() * words.length)]; 
 
//should replace all characters in the string with * 
 
$('#value').text(rand).replaceAll(rand,'*');
.container{ 
 
    border: 1px solid black; 
 
    padding: 5px; 
 
    margin: 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class='container'> 
 
    <input type='text' /> 
 
    <span id='value'></span> 
 
    <hr /> 
 
    <button type='button' id='submit'>Submit</button> 
 
</div>

Id eher nicht die Regex Weg gehen, aber Im schätzend ich kann.


Im ein einfaches Henker Programm für Spaß zu schreiben, die die Zeichenfolge mit * Zeichen verbergen. Der Benutzer gibt dann ein Zeichen ein, und wenn das Zeichen in der Zeichenfolge korrekt ist, wird es auf sein Original zurückgesetzt.

Regex ist großartig für solche Sachen, ich bin einfach nicht so vertraut mit ihm.

+0

ich denke, Sie richtig sind. [siehe diese Antwort] (https://stackoverflow.com/questions/23325973/jquery-replace-in-html) – ARr0w

+0

Warum nicht einfach Regex verwenden? Es ist buchstäblich nur '/./g': https://jsfiddle.net/kz1m93d5/ –

+0

Sie könnten durch die Zeichenfolge durchlaufen und jedes Zeichen einzeln ersetzen, etwas wie 'array [string] [counter] = '*';' (da du deine Strings in einem Array speicherst) –

Antwort

2

möchten Wenn Sie nicht wollen, regex verwenden Sie split() verwenden könnte zu transformieren String zu Array und dann map(), um jede Elementbasis zu ändern d auf Bedingung.

let replaceAll = (str, chars = []) => { 
 
    return str.split('') 
 
    .map(c => c.trim() && !chars.includes(c) ? '*' : c) 
 
    .join(''); 
 
} 
 
    
 
console.log(replaceAll('lorem ipsum', ['l', 'm'])) 
 
console.log(replaceAll('123 lorem ips', ['2', 'i']))

+1

Mapping der Zeichen ist ein großer Vorschlag, vielen Dank –

+1

Gern geschehen, wenn Sie aus irgendeinem Grund Zahlen im zweiten Parameter-Array übergeben und dann in der Zeichenfolge suchen müssen Sie dann auch diese Nummer zu Zeichenfolge wie https zuordnen://jsfiddle.net/Lg0wyt9u/2520/ –

0

Ich weiß nicht, was das Formular macht, oder wie Sie words bevölkern. Der Grund, warum ich das erwähne, ist, wenn das Array über eine JavaScript-Funktion oder ein jquery-Objekt gefüllt wird, könnte es eine Menge unerwünschter Einträge im Array geben. Sie können den folgenden Code ändern, um diese unerwünschten Einträge zu ignorieren.

Was dieser Code tut ist Schleifen durch die words Array und Ersetzen jedes Zeichens (Regex /./g) und Ersetzen durch ein Sternchen (*).

var words = ['marvel','computer','regex','throne']; 
 
var rand = words[Math.floor(Math.random() * words.length)]; 
 
//should replace all characters in the string with * 
 
for(var i in words) { 
 
    words[i] = words[i].replace(/./g, '*'); 
 
} 
 
console.log(words);
.container{ 
 
    border: 1px solid black; 
 
    padding: 5px; 
 
    margin: 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class='container'> 
 
    <input type='text' /> 
 
    <span id='value'></span> 
 
    <hr /> 
 
    <button type='button' id='submit'>Submit</button> 
 
</div>

+0

Wäre es nicht besser, die Zeichen in der zufälligen Zeichenkette zu ersetzen, die von der Reihe und nicht von jedem Wort in der Reihe kommt? –

1

Dies ist ein Weg, um zu erreichen, was Sie

var words = ['marvel','computer','regex','throne']; 
 
var rand = words[Math.floor(Math.random() * words.length)]; 
 
//should replace all characters in the string with * 
 
var maskedRand = '' 
 
for (var char in rand) { 
 
    maskedRand += '*' 
 
} 
 
$('#value').text(maskedRand);
.container{ 
 
    border: 1px solid black; 
 
    padding: 5px; 
 
    margin: 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class='container'> 
 
    <input type='text' /> 
 
    <span id='value'></span> 
 
    <hr /> 
 
    <button type='button' id='submit'>Submit</button> 
 
</div>

Verwandte Themen