Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中计算字符串中的空行数_Javascript_Arrays_Regex_Newline - Fatal编程技术网

如何在javascript中计算字符串中的空行数

如何在javascript中计算字符串中的空行数,javascript,arrays,regex,newline,Javascript,Arrays,Regex,Newline,我试图数一数字符串中的所有空行。我目前的工作类型: function count_empty(text) { var regex = /\r\n?|\n/g; var lines = text.split(regex); var sep = []; $.each(lines, function(k, val) { if(!val) { //sentence sep.push(val);

我试图数一数字符串中的所有空行。我目前的工作类型:

function count_empty(text) {
    var regex = /\r\n?|\n/g;
    var lines = text.split(regex);
    var sep = [];
    $.each(lines, function(k, val) {
        if(!val) {
            //sentence
            sep.push(val);
        }
    });
    return sep.length;
}
…但我真的认为,通过这样一种更好的方法可以实现:

function count_empty(text) {
    return (text.match(/\r\n?|\n/g) || []).length;
}
当然,第二个备选方案中的正则表达式应该进行修改,以实际满足要求。所以问题是:在第二种方法中,我应该使用什么样的正则表达式来检索空行呢? 一个注意事项:如果一行只包含空格,它将被视为空行

此textarea的字符串应随函数返回3

<textarea id="test">first line

third line


</textarea>
第一行
第三行
谢谢

你可以这么做

function count_lines(txt){
   return (txt.match(/\n(?=\n/g)) || []).length;
}
上面所做的是匹配
\n
,然后是另一个
\n
,然后返回匹配的长度


如果为正则表达式启用多行模式,
m
,则可以匹配空行,
^$
,并计算找到的匹配数。请注意,
[\t]*
将匹配零个或多个空格或制表符

function count_lines(text){
    return text ? (text.match(/^[ \t]*$/gm) || []).length : 0;
}
这应该非常快,因为在正则表达式之后不需要任何后处理

有关注释的演示,请参见。

这是什么

function count_empty(text) {
    return (text.match(/(^[ \t]*(\n|$))/gm) || []).length;
}

嗨!如果我在字符串末尾加了一些空行,它们就不会被这个正则表达式计算在内。@andufo,谢谢。看起来
\s*
量词正在使用相邻的换行符。我已经根据需要更新了正则表达式。刚刚用你的正则表达式尝试了很多场景,看起来它像预期的那样工作。谢谢将
视为1,只处理空格和制表符,而不是所有空格。@Xotic750您是对的,忘记在文本区域为空时测试该情况。只有两件事:1)我添加了润色返回值,以防没有匹配项(以避免js错误):
返回(text.match(/\n(?=\n)/g)| |[])length和2)由于某种原因,如果我在字符串的末尾留下一行空行,它就不会被计数。@andufo它会被计数。不是吗?尝试在演示中添加一行额外内容。它应该显示上次更新后的某个地方缺少括号:s@andufo是的。输入错误:p感谢您的帮助,必须使用@GioBorje的解决方案,它在所有情况下都有效。这个
应该是1还是0,也就是说,一行必须由
\r\n
终止吗?当你说
空格时
你的意思是确切的还是任何空格?@Xotic750 hi!在这种情况下,计数应该是0,我指的是空格。它不是计算最后一次输入(如果在末尾添加了一个空行)true,我已经更新了,以防您想尝试其他方法。谢谢:)