我可以使用javascript正则表达式来计算字符串中第一个文本字符之前的空白字符数吗?我只关心是否有0,1和2 +。
我目前正在使用的解决方案是使用三个正则表达式并使用匹配来确定0,1或2+类别(每个类别的单独模式),但我正在寻找更优雅的解决方案。
甚至可以用正则表达式计算模式吗?我可以使用非贪婪的分组并计算我猜的长度......
答案 0 :(得分:6)
" a".match(/^\s{0,2}/)[0].length
此正则表达式匹配字符串开头的0到2个空白字符。
答案 1 :(得分:4)
你可以这样做:
" aaa".replace(/^(\s*).*$/,"$1").length
答案 2 :(得分:2)
我不确定我会在现实生活中使用正则表达式来完成这项工作,但你可以在捕获中匹配它们并查看它们的长度:
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);
}
答案 3 :(得分:1)
你可以找到字符串中第一个非空格字符的索引, 这与前导空白字符的数量相同。
t.search(/\S/);
如果您坚持,可以使用Math.min(t.search(/\S/), 2);
如果没有非空格字符,则返回值为-1 ....
答案 4 :(得分:0)
答案 5 :(得分:0)
为什么不只使用捕获组并检查长度:
<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或其他,并作用于字符串的其余部分。
您应该将正则表达式视为工具,而不是整个工具箱。