74

新しい行を含む文字列があります。これらをHTMLに変換したい<br>のですが、検出に苦労しています。

次のようなJavaScript文字列セットを想像してみてください。

var foo = "Bob
is
cool";

それらは私が検出する必要がある一種の新しい線です。それらは特殊文字を使用していません\n-それらは単なるプレーンフォーマットです。

4

8 に答える 8

85

それが機能しない理由は、javascript文字列が次の改行文字の前に終了する必要があるためです(\n明らかにではありません)。その理由\nは、開発者が改行文字(ASCII:10)を文字列に簡単に挿入できるようにするためです。

次のような文字列がある場合:

//Note lack of terminating double quote
var foo = "Bob 

その時点でコードに構文エラーが発生し、実行が停止します。

\複数行にまたがる文字列が必要な場合は、次のように、行を終了する直前に円記号''を挿入できます。

//Perfectly valid code
var foo = "Bob \
is \
cool.";

ただし、その文字列には、文字列が別々の行に分割された位置に文字が含まれません。\n文字列に改行を挿入する唯一の方法は、値が10の文字を挿入することです。最も簡単な方法は、\nエスケープ文字です。

var foo = "Bob\nis\ncool.";
于 2012-04-14T14:59:44.250 に答える
75

更新:テンプレートリテラルと呼ばれるJavaScript-ES6の素晴らしい構文設計に出くわしました。あなたがしたいことは、文字通り(バックティックまたはアクサングラーブ文字)を使用して行うことができます。`

var foo = `Bob
is
cool`;

その場合、foo === "Bob\nis\ncool"は真です。

なぜデザイナーはそれ` ... `を終わらせないでおくことができると決めたのに、" ... "そして' ... 'それらに改行文字を入れることは違法であるのは私を超えています。

ターゲティングブラウザがES6指定のJavascript実装をサポートしていることを確認してください。

 


PSこの構文は、PHP、.NET、およびその他のスクリプト言語に存在する非常に優れた機能もサポートしています。つまり、次のようなパラメータ化された文字列を作成できる「タグ付きテンプレートリテラル」です。

var a = 'Hello', b = 'World';
console.log(`The computer says ${ a.toUpperCase() }, ${b}!`);
// results in "The computer says HELLO, World!"
于 2016-10-30T23:20:26.917 に答える
8

\nまたはを確認して\rください\r\n

改行にはいくつかの表現があります。http://en.wikipedia.org/wiki/Newline#Representationsを参照してください。

于 2012-04-14T14:43:23.827 に答える
4

\nとにかく使っているのは見えない、あるいは使っているのかもしれません\r。したがって、\nまたは\rで置き換えるだけです<br/>

于 2012-04-14T14:44:04.553 に答える
3

\nの仕組みを理解していないと思います。結果の文字列には、値10のバイトが含まれています。これは、JavaScriptソースコードで\nで表されます。

投稿したコードスニペットは実際には機能しませんが、機能した場合、Windowsスタイルの改行でない限り、改行\ nと同等になります。この場合、改行は\ r\nになります。(ただし、置換は引き続き機能します)。

于 2012-04-14T14:44:25.010 に答える
3

これは、上記の@AndrewDunnの投稿への小さな追加です

2つを組み合わせると、読み取り可能なJSと一致する出力を生成できます

 var foo = "Bob\n\
    is\n\
    cool.\n\";
于 2016-06-23T09:06:07.100 に答える
2

次の機能を使用できます。

  function nl2br (str, is_xhtml) {
     var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';
     return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
  } 

そのようです:

var mystr="line\nanother line\nanother line";
mystr=nl2br(mystr);
alert(mystr);

これは警告する必要がありますline<br>another line<br>another line

関数のソースはここからです:http: //phpjs.org/functions/nl2br :480

nl2brこれはphpの関数を模倣しています...

于 2012-04-14T14:44:35.570 に答える
0

JSで改行文字をエスケープするために使用したクエリ文字列: LOAD DATA LOCAL INFILE 'Data.csv' INTO TABLE DEMO FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 ROWS;

これには新しいES6構文が含まれます-テンプレートリテラル``そして私は'\n'を'\r \ n'に変更しようとしましたが、私の場合は完全に機能しました。

PS:この例は、CSVデータをmysqlDBにアップロードするための私のクエリです。

于 2019-05-03T09:08:46.937 に答える