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

JavaScript中如何匹配连字符分隔列表词汇且不匹配带空格场景?

解决方案

你可以使用以下带前后断言的正则表达式实现需求:
/(?<=^|-)(match)(?=-|$)/

正则说明

  • (?<=^|-):正向后顾断言,限制match的前面只能是字符串开头 或 连字符-,直接排除前面是空格的场景
  • (match):你需要捕获的目标内容,对应正则的第一个捕获组
  • (?=-|$):正向前瞻断言,限制match的后面只能是连字符- 或 字符串结尾,直接排除后面是空格的场景

匹配效果验证

✅ 可匹配的场景:

  • hello-match-world → 成功捕获match
  • hello-match → 成功捕获match
  • match-world → 成功捕获match
  • match(单独出现) → 成功捕获match

❌ 不可匹配的场景:

  • hello match world → 前后有空格,不匹配
  • hello match → 前有空格,不匹配
  • match test → 后有空格,不匹配
  • match123 → 后接非连字符/结尾内容,不匹配
  • 123match → 前接非连字符/开头内容,不匹配

JS使用示例

// 测试用例
const testCases = [
  'hello-match-world',
  'hello-match',
  'match',
  'hello match world',
  'hello match',
  'match test'
]

const reg = /(?<=^|-)(match)(?=-|$)/

testCases.forEach(str => {
  const res = str.match(reg)
  console.log(`"${str}" 匹配结果:`, res ? res[1] : '无匹配')
})

输出结果:

"hello-match-world" 匹配结果: match
"hello-match" 匹配结果: match
"match" 匹配结果: match
"hello match world" 匹配结果: 无匹配
"hello match" 匹配结果: 无匹配
"match test" 匹配结果: 无匹配

旧环境兼容方案

如果需要兼容不支持后向断言的老旧JS环境,可以使用非捕获组版本:/(?:^|-)(match)(?:-|$)/,同样取第一个捕获组即可获取match内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:09:01