JavaScript中验证句号后需空格的正则表达式问题
正则表达式调整需求
请考虑以下字符串:
- I am happy.And I know it.
- I am happy. And I know it.
- I am happy.
- I am happy
规则:句号后面如果存在字符/单词,则必须有空格。预期只有第一个字符串验证失败,其余均通过。
尝试过的正则:
new RegExp(/(\.\s|^)(?!\S)/)
测试结果全部返回false,不符合预期,需要调整正则实现规则。
正确的正则表达式方案
方案1:检测违反规则的情况
如果要判断字符串是否违反规则(即存在句号后直接跟非空白字符的情况),使用以下正则:
/\.(?=\S)/
解释:
\.匹配句号(?=\S)正向预查,确保句号后紧跟非空白字符(无空格)
当test()返回true时,说明字符串违反规则;返回false则符合规则。
测试结果:
/\.(?=\S)/.test('I am happy.And I know it.') // true(验证失败) /\.(?=\S)/.test('I am happy. And I know it.') // false(验证通过) /\.(?=\S)/.test('I am happy.') // false(验证通过,句号后无字符) /\.(?=\S)/.test('I am happy') // false(验证通过,无句号)
方案2:直接验证符合规则的字符串
如果要直接验证字符串是否完全符合规则,使用以下正则:
/^(?!.*\.(?=\S)).*$/
解释:
^匹配字符串开头(?!.*\.(?=\S))负向预查,确保整个字符串中不存在“句号后跟非空白字符”的情况.*匹配任意字符(除换行)$匹配字符串结尾
测试结果:
/^(?!.*\.(?=\S)).*$/.test('I am happy.And I know it.') // false(验证失败) /^(?!.*\.(?=\S)).*$/.test('I am happy. And I know it.') // true(验证通过) /^(?!.*\.(?=\S)).*$/.test('I am happy.') // true(验证通过) /^(?!.*\.(?=\S)).*$/.test('I am happy') // true(验证通过)
原正则无效的原因
原正则/(\.\s|^)(?!\S)/的逻辑是匹配“句号加空格”或“字符串开头”且后面无空白字符,完全不符合需求规则,因此所有测试均返回false。
内容的提问来源于stack exchange,提问作者TheWebs
相关产品推荐
相关产品推荐

