javascript - 替换javascript中字符串中的字母

标签 javascript regex

我正在尝试将下划线字符串中的下划线替换为单词字符串中的相应字母(请参阅片段中的完整代码),到目前为止,我遇到了奇怪的错误,它不会检查所有下划线或会错过一,无论如何要修复它?如果需要的话我很乐意重建它。

    var underscore = "";
    var letter;;

    var wordList = ["apple", "peach", "pear", "mango", "banana", "paper", "pens", "laptop", "desk", "chair", "star", "sky", "moon", "sun", "planets"];

    var word = wordList[Math.floor(Math.random() * wordList.length)];

    for (i = 0; i < word.length; i++)   {
        var underscore = underscore + "_ ";
    }    

   var replaceletter = 0
                for (i = 0; i < word.length; i++)   {
                    replaceletter = word.indexOf(letter, replaceletter);
                    underscore = underscore.replace(underscore.charAt(replaceletter), word.charAt(replaceletter));
                }

/* Hangman Game CSS File */
body
{
	background-color: #1B264F;
}

#main {
	background-color: #5386E4;
	height: 97vh; 
   	width: 95vw;
   	vertical-align: middle;

}
canvas {
    padding-left: 0;
    padding-right: 0;
    margin-left: auto;
    margin-right: auto;
    display: block;
    margin-top: auto;
    margin-bottom: auto;
}
<!DOCTYPE html>
<html>
	<head>
		<title>Hangman by Lachlan Teale</title>	
		<meta name="description" content="Lachlan Teale's Hangman Game 2015">
		<meta name="keywords" content="hangman, lachlan, teale, Javascript">
		<meta charset="UTF-8">
		<meta name="author" content="Lachlan Teale">
		<link rel="stylesheet" type="text/css" href="style.css">
	</head>
	<body>
	<canvas id="main" width="1920" height="1080" style="border:1px solid #d3d3d3;"></canvas>

	<script type="text/javascript">

	//setting variables
		var canvas = document.getElementById('main');
     	var context = canvas.getContext('2d');
      	var underscore = "";
      	var letter;
      	var complete = false;

	//list of words
		var wordList = ["apple", "peach", "pear", "mango", "banana", "paper", "pens", "laptop", "desk", "chair", "star", "sky", "moon", "sun", "planets"];

	//picking a random word from the list
		var word = wordList[Math.floor(Math.random() * wordList.length)];

	//print out the underscores for the number of letters
		for (i = 0; i < word.length; i++)	{
			var underscore = underscore + "_ ";
		}

		context.font = '50pt Calibri';
      	context.textAlign = 'center';
      	context.fillStyle = '#E2E2E3';
      	context.fillText(underscore, canvas.width * 0.5, canvas.height * 0.70);

    //correct letter text
      	context.font = 'bold 30pt Calibri';
      	context.textAlign = 'center';
      	context.fillStyle = '#E2E2E3';
      	context.text
      	context.fillText("Correct Letters", canvas.width * 0.08, canvas.height * 0.05);

    //Wrong Letter text
      	context.font = 'bold 30pt Calibri';
      	context.textAlign = 'center';
      	context.fillStyle = '#E2E2E3';
      	context.text
      	context.fillText("Wrong Letters", canvas.width - (canvas.width * 0.08), canvas.height * 0.05);

	//checking which button is pressed
		window.addEventListener('keydown', function(event) {
			if ( event.keyCode >= 65 && event.keyCode <= 90 ) {
    			context.clearRect(0, canvas.height * 0.80, canvas.width, canvas.height);  
        		letter = String.fromCharCode( event.keyCode ).toLowerCase();
        		context.font = '50pt Calibri';
      			context.textAlign = 'center';
      			context.fillStyle = '#E2E2E3';
      			context.fillText(letter, canvas.width * 0.5, canvas.height * 0.85);
      		}
		});

	//checking if back key is pressed
		document.addEventListener('keydown', function(event) {                     
    		if ( event.keyCode == 8 ) {											   
    			context.clearRect(0, canvas.height * 0.80, canvas.width, canvas.height); 
    		}
    	});

	//checking if enter is pressed
      	document.addEventListener('keydown', function(event) {                     
    		if( event.keyCode == 13 ) {
    //checking if letter is in the word
    			var replaceletter = 0
       			for (i = 0; i < word.length; i++)	{
    				replaceletter = word.indexOf(letter, replaceletter);
    				underscore = underscore.replace(underscore.charAt(replaceletter), word.charAt(replaceletter));
    			}

				context.clearRect(canvas.width * 0.4, canvas.height * 0.3, canvas.width *0.7, canvas.height * 70);
    			context.font = '50pt Calibri';
      			context.textAlign = 'center';
      			context.fillStyle = '#E2E2E3';
      			context.fillText(underscore, canvas.width * 0.5, canvas.height * 0.70);
			}
    	});
		
		</script>
	</body>
</html>

最佳答案

您可以使用此循环替换它们:

for (i = 0; i < word.length; i++) {
    underscore = underscore.replace("_", word.charAt(i));
}

可能有更优雅的解决方案,但即使这是你想要的,我也不太明白。

关于javascript - 替换javascript中字符串中的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29060534/

相关文章:

javascript - 按条件捕获多个字符串

javascript - 如何将 HTML5 桌面通知的关闭时间更改为不自动关闭?

javascript - 如何在 nodejs 中组织与 DB 的交互?

javascript - jquery 使用对象作为过滤器

javascript - 当 JSTL escapeXml 为 false 时如何防止 JavaScript 注入(inject) (XSS)

java - 我应该使用 substring 来避免 java 数据库中的某个字符串还是有其他方法可以绕过它?

javascript - 如何在 JavaScript 中将字符串限制为一组特定的字符?

regex - Google Big Query 中 REGEXP_MATCH 的奇怪行为

javascript - 有没有办法检测控制台用户是否正在更改变量

javascript - 通过 REGEX 验证所有语言字符的字段