JS计算空格

时间:2018-01-02 15:02:20

标签: javascript string whitespace

我必须在字符串中找到空格,这包括使用Javascript的输入,制表符和空格。我有这个代码来查找空格

function countThis() {
    var string = document.getElementById("textt").value;
    var spaceCount = (string.split(" ").length - 1);
    document.getElementById("countRedundants").value = spaceCount;
}

这样可以正常工作,并给出了总空格数。

问题是,如果空格/输入/标签彼此相邻,我希望它只计数一次。我无法解决这个问题,并希望得到一些帮助或指出正确的方向。

谢谢,古斯塔夫

4 个答案:

答案 0 :(得分:3)

Tou可以在split中使用正则表达式:

var spaceCount = (string.split(/\s+/gi).length - 1);

答案 1 :(得分:1)

使用正则表达式来实现这一目标。 例如,您可以检查一个或多个制表符,空格或换行符的匹配数,并使用它们的计数。

正则表达式规则是:[\t\s\n]+ - 意味着一个或多个标签,空格或换行符合规则。

对于JavaScript:

var test = "Test   Test        Test\nTest\nTest\n\n";
var spacesCount = test.split(/[\t\s\n]+/g).length - 1;
console.log(spacesCount);

正则表达式是一种非常有效的方法。或者,您必须手动迭代对象,并尝试匹配存在一个或多个空格,制表符或换行符的情况。

考虑到你正在尝试做的事情,在编译器中使用,以便将特定字符序列识别为特定元素,称为标记。这种做法称为词法分析或标记化。由于正则表达式存在,因此无需手动执行此检查,除非您想要执行非常高级或特定的操作。

答案 2 :(得分:1)

这是一个丑陋的解决方案,没有使用任何正则表达式,性能方面它是最佳的,但它可以更加pythonic。

def countThis(s):
    count = 0
    i = 0
    while i < len(s):
        while i < len(s) and not s[i].isspace():
            i += 1
        if i < len(s):
            count += 1
            i += 1
        while i < len(s) and s[i].isspace():
            i += 1
    return count

print(countThis("str"))
print(countThis("   str   toto"))
print(countThis("Hello, world!"))

答案 3 :(得分:1)

Stéphane Ammar's solution可能是最简单的,但如果你想要更高效的东西:

function countGaps(str) {
    let gaps = 0;
    const isWhitespace = ch => ' \t\n\r\v'.indexOf(ch) > -1;

    for (let i = 0; i < str.length; i++)
        if (isWhitespace(str[i]) && !isWhitespace(str[i - 1]))
            ++gaps;

    return gaps;
}