繁体   English   中英

javascript正则表达式计算空白字符

[英]javascript regex to count whitespace characters

我可以使用javascript正则表达式来计算字符串中第一个文本字符之前的空格字符数吗? 我只关心是否有0,1和2+。

我目前的工作解决方案是有三个正则表达式,只需使用匹配来确定0,1或2+类别(每个类别的单独模式),但我正在寻找更优雅的解决方案。

是否可以使用正则表达式计算模式? 我可以使用非贪婪的分组并计算我猜的长度....

"     a".match(/^\s{0,2}/)[0].length

此正则表达式匹配字符串开头的0到2个空格字符。

你可以这样做:

"   aaa".replace(/^(\s*).*$/,"$1").length

我不确定我会在现实生活中使用正则表达式来完成这项工作,但你可以在捕获中匹配它们并查看它们的长度:

function countLeadingSpaces(str) {
    return(str.match(/^(\s*)/)[1].length;
}

一种针对速度设计的非正则表达方式(与正则表达式相比,几乎所有东西都很快):

function countLeadingSpaces2(str) {
    for (var i = 0; i < str.length; i++) {
        if (str[i] != " " && str[i] != "\t") {
            return(i);
        }
    }
    return(str.length);
}

您可以在字符串中找到第一个非空格字符的索引,该索引与前导空格字符的数量相同。

t.search(/\S/);

如果您坚持,可以使用Math.min(t.search(/\\S/), 2);将返回值限制为0,1或2 Math.min(t.search(/\\S/), 2);

如果没有非空格字符,则返回值为-1 ....

这应该做的工作:

string.split(/[^ \t\r\n]/)[0].length;

示例: http//jsfiddle.net/Nc3SS/1/

为什么使用捕获组并检查长度:

<html>
    <head>
    </head>
    <body>
        <script language="javascript">
            var myStr = "  hello";
            var myRe = /^(\s*)(.*)$/;
            var match = myRe.exec(myStr);
            alert(match[1].length);  // gives 2
            alert(match[2]);         // gives "hello"
        </script>
    </body>
</html

这可以跟随代码,该代码作用于您的三种情况,长度为0,1或其他,并作用于字符串的其余部分。

您应该将正则表达式视为工具 ,而不是整个工具箱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM