无法在从 html 实体创建的换行符上拆分 textarea

Posted

技术标签:

【中文标题】无法在从 html 实体创建的换行符上拆分 textarea【英文标题】:Cannot split textarea on newline created from html entities 【发布时间】:2015-07-23 13:18:41 【问题描述】:

我有一个需要包含新行的默认值的文本区域,因此我使用了使用从this answer 找到的 html 实体的技术

<textarea rows=4 id="mytextarea">John,2&#13;&#10;Jane,3&#13;&#10;John,4&#13;&#10;Jane,5</textarea>

然后我有一个按钮,它启动一个用于解析 textarea 的按钮,我想要完成的第一件事是从 textarea 值创建一个rows 数组,但这是我遇到问题的地方。 another answer 详细介绍了哪些浏览器将换行符表示为 \r\n 以及哪些仅表示为 \n,尽管在我的情况下这可能不是绝对必要的,但我仍然决定尝试一下:

var textAreaValue = document.getElementById("mytextarea").value;
textAreaValue = textAreaValue.replace(/\s/g, ""); //remove white space

var rows = textAreaValue.replace(/\r\n/g, "\n").split("\n");

rows 但是以["John,2Jane,3John,4Jane,5"] 的形式返回。所以分裂没有效果;我做错了什么?

【问题讨论】:

因为实体仍然存在于内存字符串中。您只是看到这些实体的 RENDERED 版本。尝试拆分&amp;#13;&amp;#10;。或者首先通过实体->原始解码循环运行字符串。 我投票结束我自己的问题(它不会让我删除它),因为 beercohol 的回答虽然解决了我的问题,但也表明这是一个无济于事的糟糕问题未来的其他人。因此,如果您将来遇到此问题并想对该问题投反对票,请投票关闭它;) 【参考方案1】:

您的正则表达式中的 \s 正在删除换行符。尝试注释掉该替换并再次检查您的行值,它应该与您期望的一样!

function parseText() 
    var textAreaValue = document.getElementById("mytextarea").value;
    //textAreaValue = textAreaValue.replace(/\s/g, ""); //remove white space

    var rows = textAreaValue.replace(/\r\n/g, "\n").split("\n");

    alert(rows);

在此处查看 JSFiddle:http://jsfiddle.net/xs2619cn/1/

我将您的逗号更改为句号只是为了使警报输出更清晰。

【讨论】:

【参考方案2】:

你不使用\n\r,所以你可以拆分&amp;#13;&amp;#10;

var rows = textAreaValue.replace(/(&#[13|10];)+/g, "\n").split("\n");

演示:http://jsfiddle.net/rr1zvxko/

【讨论】:

还是数组长度为1:John,2Jane,3John,4Jane,5

以上是关于无法在从 html 实体创建的换行符上拆分 textarea的主要内容,如果未能解决你的问题,请参考以下文章

C# 无法通过换行符将字符串拆分为数组(来自 StreamReader)

在换行符和逗号上拆分字符串[重复]

如何在从 .Include 实体框架查询返回的数据上指定 where 子句?

Latex文件如何拆分进行独立编译?

如果字符串包含多个 \n,如何在每 25 个换行符(\n)上拆分一个字符串

Spark,Scala在从文件读取后无法正确创建视图