You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求匹配非空白字符的正则表达式,解决现有正则结尾匹配漏洞

解决匹配「非空白字符」的正则问题

问题分析

你当前的正则 /name\s+([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*[A-Za-z0-9])(?!\S)/g 中,(?!\S) 仅断言目标内容后不是非空白字符,允许后面跟空白字符,但无法阻止空白后再出现其他内容(比如name test-name anytext里的anytext),这就导致不符合需求的输入也会被匹配。

修正后的正则

要实现「匹配目标内容后不允许存在任何空白或其他字符」,需要用$(匹配字符串/行的结尾)替换(?!\S),同时建议加上^(行首)限定范围,避免字符串中间的片段被误匹配:

/^name\s+([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*[A-Za-z0-9])$/g

正则说明

  • ^:锁定字符串/行的起始位置,确保name是内容开头
  • name\s+:匹配name后跟一个或多个空白字符
  • ([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*[A-Za-z0-9]):原捕获组,匹配由字母数字和连字符组成的合法名称(连字符不会出现在首尾)
  • $:锁定字符串/行的结束位置,确保捕获组之后无任何字符(包括空白)

验证匹配情况

  • 匹配成功的输入:
    • name test
    • name test-name
    • name test-name-2
  • 匹配失败的输入:
    • name test-name anytext
    • name test-name (末尾带空格)
    • xxx name test(开头有其他内容)

如果允许目标内容后存在换行(但无其他字符),可以用\s*$替代$,适配末尾含空白/换行的场景:

/^name\s+([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*[A-Za-z0-9])\s*$/g

内容的提问来源于stack exchange,提问作者armxsp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:52:52