JavaScript 按行尾字符拆分字符串并读取每一行
JavaScript to split string by end of line character and read each line
我需要遍历一个包含多个 eol 字符的大字符串,并阅读这些行中的每一行以查找字符。我本可以执行以下操作,但我觉得它不是很有效,因为这个大字符串中可能有 5000 多个字符。
var str = largeString.split("'n");
然后作为数组遍历 str
我真的不能使用jquery,只能使用简单的JavaScript。
还有其他有效的方法吗?
您始终可以使用 indexOf
和 substring
来获取字符串的每一行。
var input = 'Your large string with multiple new lines...';
var char = ''n';
var i = j = 0;
while ((j = input.indexOf(char, i)) !== -1) {
console.log(input.substring(i, j));
i = j + 1;
}
console.log(input.substring(i));
编辑 在回答之前,我没有看到这个问题这么老。 #fail
编辑 2 修复了在最后一个换行符之后输出最后一行文本的代码 - 感谢@Blaskovicz
> 5000 对于现代 JavaScript 引擎来说似乎并不那么强烈。当然,这也取决于您在每次迭代中执行的操作。为清楚起见,我建议使用 eol.split
和 [].forEach
.
eol
是一个 npm 包。在 Node.js 和 CommonJS 中,您可以npm install eol
和require
它。在 ES6 捆绑器中,您可以import
.否则通过<script>
加载eol
是全局的
// Require if using Node.js or CommonJS
const eol = require("eol")
// Split text into lines and iterate over each line like this
let lines = eol.split(text)
lines.forEach(function(line) {
// ...
})
如果您使用的是 NodeJS,并且有一个大字符串要逐行处理:
const Readable = require('stream').Readable
const readline = require('readline')
promiseToProcess(aLongStringWithNewlines) {
//Create a stream from the input string
let aStream = new Readable();
aStream.push(aLongStringWithNewlines);
aStream.push(null); //This tells the reader of the stream, you have reached the end
//Now read from the stream, line by line
let readlineStream = readline.createInterface({
input: aStream,
crlfDelay: Infinity
});
readlineStream.on('line', (input) => {
//Each line will be called-back here, do what you want with it...
//Like parse it, grep it, store it in a DB, etc
});
let promise = new Promise((resolve, reject) => {
readlineStream.on('close', () => {
//When all lines of the string/stream are processed, this will be called
resolve("All lines processed");
});
});
//Give the caller a chance to process the results when they are ready
return promise;
}
您可以逐个字符手动读取它,并在获得换行符时调用处理程序。就 CPU 使用率而言,它不太可能更有效率,但可能会占用更少的内存。但是,只要字符串小于几 MB,就无关紧要。
function findChar(str, char) {
for (let i = 0; i < str.length; i++) {
if (str.charAt(i) == char) {
return i
}
}
return -1
}
所以,你知道怎么做,你只是确保没有更好的方法可以做到这一点?好吧,我不得不说你提到的方式正是这样。尽管如果您正在寻找由某些字符拆分的某些文本,您可能需要查找正则表达式匹配项。可以在此处找到JS正则表达式参考
如果您知道如何设置文本,这将很有用,
类似于var large_str = "[important text here] somethign something something something [more important text]"
var matches = large_str.match('[([a-zA-Z's]+)'])
for(var i = 0;i<matches.length;i++){
var match = matches[i];
//Do something with the text
}
否则,是的,带有循环的 large_str.split(''') 方法可能是最好的。
- 在JavaScript中输出转义字符
- 不同浏览器中的空白字符正则表达式行为
- Regex匹配除“”之外的所有字符;.js”;
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 动态插入的表:JQuery未检测到最后一行
- 使用RegExp查找url中的字符
- 如何为jQuery屏蔽输入插件创建一个允许字母数字、空格和重音字符的掩码
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 如何在Angular UI网格中选择下一行
- 允许在文本框中使用某些字符
- JavaScript 按行尾字符拆分字符串并读取每一行
- 对于循环,如何在一行上显示每个字符
- 如何使用JavaScript计算一行中的字符数
- 我必须把一个特定字符后面的字符排成一行
- 如何在CSS浏览器中使日语字符(长文本)前面的数字出现在一行中
- 如何从一行字符中提取字符串
- 我的javascript代码只打印一行.我需要它来打印 10 行 20 个字符
- 是否有可能从json中读取第一行或n个字符而不下载所有数据
- 文本区域限制字符的每一行在javascript