如何编写匹配仅含单个空格字符串的正则表达式?
筛选仅含单个空格的行的正则方案
你原来用的/ {1}/.test(line)之所以返回true,是因为这个正则只检查是否存在至少一个空格,不管总数多少,自然不符合你要筛选“仅含单个空格行”的需求。
直接可用的正则方案
如果要匹配整行中空格总数恰好为1的行,用这个正则就可以:
/^[^ ]* [^ ]*$/.test(line)
拆解逻辑:
^匹配行的开头[^ ]*匹配零个或多个非空格字符(可以是字母、数字、符号,甚至空内容)- 中间的单个空格,就是我们要限定的唯一空格
[^ ]*匹配空格之后的零个或多个非空格字符$匹配行的结尾
测试几个场景:
- 输入
"a b c"(两个空格)→ 返回false,符合你的预期 - 输入
"a b"(一个空格)→ 返回true - 输入
" "(仅一个空格)→ 返回true - 输入
"abc"(无空格)→ 返回false
关于你写的match写法
你写的line.match(/ /g).length == 1逻辑没问题,但有个隐患:如果行里没有空格,match(/ /g)会返回null,直接访问length会报错。可以改成更安全的写法:
(line.match(/ /g) || []).length === 1
这样没有空格时,|| []会把null转成空数组,length就是0,不会触发报错。
内容的提问来源于stack exchange,提问作者user12582392
相关产品推荐
相关产品推荐

