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

如何匹配仅由单个特殊字符(星号)组成的子串?

解决纯星号子串的正则匹配问题

问题背景

给定字符串:

const str = "he**o *ow ar* you ***** ***?"

需要匹配其中仅由星号组成的连续子串,预期结果:

const output = ["*****", "***"]

原尝试使用正则 /\b\*+\b/g,但因星号不属于单词字符,\b(单词边界)无法生效,导致匹配失败。

解决方案

使用环视断言准确定位纯星号子串的边界,正确正则如下:

const regex = /(?<!\*)\*+(?!\*)/g;

正则解释

  • (?<!\*):负向后行断言,确保当前匹配的星号前面不是星号(或处于字符串起始位置)
  • \*+:匹配1个或多个连续的星号
  • (?!\*):负向前行断言,确保当前匹配的星号后面不是星号(或处于字符串结束位置)

代码验证

const str = "he**o *ow ar* you ***** ***?";
const regex = /(?<!\*)\*+(?!\*)/g;
const output = str.match(regex);
console.log(output); // 输出 ["*****", "***"]

原正则失效原因

\b 是单词边界,仅匹配单词字符(字母、数字、下划线)与非单词字符之间的位置。星号属于非单词字符,它和空格、问号等其他非单词字符之间不会触发\b,因此无法正确界定纯星号子串的边界。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:10:24