我能使用JavaScript正则表达式来计算字符串中第一个文本字符前的空格字符数量吗?我只关心有0个、1个和2个以上的情况。目前我的工作解决方案是使用三个正则表达式,并使用match确定0、1或2+类别(每个模式单独匹配),但我正在寻找更优雅的解决方案。是否可能使用正则表达式计算模式的数量?我可以使用非贪婪分组并计算长度,我猜....
" a".match(/^\s{0,2}/)[0].length
这个正则表达式匹配字符串开头的0到2个空白字符。
theString.match(/^\s+/)[0].length
呢?根据我理解,OP的意思是2+表示两个或更多,尽管措辞有些奇怪。 - Ray Toalstr.replace(/^\s*(.*?)\s*$/,"$1")
。 - Enki\s*
。好答案!! - Ray Toal" 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);
}
\s*
,从而完全摆脱“匹配”检查呢? - paxdiablo/^(\s*)[^ \t]/
匹配结果返回 null,这意味着你不能直接引用 [1].length
来获取匹配结果,需要进行某种检查。我并不是在建议我的方法最紧凑,但我试图为所有边缘情况提供安全保障。 - jfriend00[ \t]
部分。由于正则表达式本来就是贪婪的,所以你可以只使用 ^(\s*)
。 - paxdiablo您可以在字符串中找到第一个非空格字符的索引,这与前导空白字符的数量相同。
t.search(/\S/);
如果您坚持,可以使用 Math.min(t.search(/\S/), 2);
来将返回限制为0、1或2。
如果没有非空格字符,则返回值为-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或其他,并对字符串的其余部分进行操作。
你应该将正则表达式视为它们所代表的工具,而不是整个工具箱。