- ベストアンサー
ボタンをクリックして文字を置換する
<textarea name="areaA" rows="4" cols="40"></textarea><br> <input type="button" onclick="..."> <textarea name="areaB" rows="4" cols="40"></textarea><br> という風な2つのテキストエリアとボタンを使い、 テキストエリアに文字を書いてもらい、 ボタンを押すと任意の行を置換したいです。 たとえば ------------------ #あああああ いいいいい #ううううう えええええ ------------------ というものを、ボタンを押すと先頭に#がついた行だけ置換して ------------------ <部品1>あああああ<部品2> いいいいい <部品1>ううううう<部品2> えええええ ------------------ という風なscriptを組みたいのですが、正規表現等が苦手でまったくうまくいきません。 ご教授いただけないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <title>test</title> <body> <form name="obj"> <p> <textarea id="textA" rows="10" cols="70"> #a b </textarea> </p> <p> <input type="button" onClick="change2()" value=" 変 換 "> </p> <p> <textarea id="textB" rows="10" cols="70"> </textarea> </p> </form> <script type="text/javascript"> function change() { var text = ''; var array = document.getElementById('textA').value.split('\r\n'); for (var i = 0; i < array.length; i++) { if (array[i].match(/^#/)) { text += "Sun" + array[i] + "Mon\r\n"; } else { text += array[i]; } } document.getElementById('textB').value = text; } function change2() { var s, str = '', count = 0; var array = document.getElementById('textA').value.replace(/\r/g,'').split('\n'); while (s = array[count++]) str += (s.match(/^#/))? 'Sun' + s + 'Mon\n': s; document.getElementById('textB').value = str; } </script>
その他の回答 (1)
- KI401
- ベストアンサー率53% (44/82)
正規表現が苦手なら、文字列に対するメソッドで乗り切りませう。 1. 取得したテキストを改行でsplit 2. 1の配列でforループ 3. それぞれ1文字目が"#"かどうか判定していく 4. "#"だった行については部品1、2を挿入するようにする
補足
下記のものを作ってみたのですが、エラーが出てうまくいきません。 間違っている箇所がわかりません。 教えていただけないでしょうか? <head> <title>変換</title> <script language="JavaScript"><!-- function change() { array = new Array(); text = document.obj.textA.value; LF = String.fromCharCode(10); array = text.split(LF); for (i = 0; i < array.length; i++) { if (array[i].match(^#)) { textB += "Sun" + array[i] + "Mon"; } else { textB += array[i]; } } } //--></script> </head> <body> <form name="obj"> <textarea name="textA" rows="10" cols="70"></textarea><br><br> <input type="button" onClick="change()" value=" 変 換 "><br><br> <textarea name="textB" rows="10" cols="70"></textarea> </form> </body>
お礼
ありがとうございます。 とても参考なしました。 以下のもので落ち着きました。 <script type="text/javascript"><!-- Com = new Array() Com[0] = "<部品1>"; Com[1] = "<部品2>"; function change() { var array = document.getElementById('textA').value.split('\r\n'); for (var i = 0; i < array.length; i++) { if (array[i].match(/^# |^#/)) { obj.textB.value += Com[0] + array[i].replace(/^# |^#/,"") + Com[1] + "\n"; } else { obj.textB.value += array[i] + "\n"; } } } // --></script> </head> <body> <form name="obj"> <p><textarea id="textA" rows="10" cols="70"> あああああ #いいいいい ううううう # えええええ おおおおお</textarea></p> <p><input type="button" onClick="change()" value=" 変 換 "></p> <p><textarea id="textB" rows="20" cols="70"></textarea></p> </form> </body>