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

正则表达式求助:如何保留@开头的单词并替换其余所有内容?

嘿,我来帮你搞定这个问题!你已经找对了匹配目标@单词的正则,现在要实现只保留这类单词,其实有两种更靠谱的思路,比硬去匹配“非目标内容”要简单得多:

方案1:直接提取目标单词(推荐)

这种方法最直观也不容易出错——直接把所有符合你规则的@单词找出来,再拼接成你想要的结果就行。

举几个不同语言的例子:

  • Python 版本:

    import re
    original_text = "Hi @emma.jones, have you seen @mike99? Some random text here."
    # 提取所有符合规则的@单词
    target_words = re.findall(r'@[a-zA-Z0-9.]+\b', original_text)
    # 用空格连接(也可以换成你需要的分隔符)
    result = ' '.join(target_words)
    print(result)  # 输出: @emma.jones @mike99
    
  • JavaScript 版本:

    const originalText = "Hi @emma.jones, have you seen @mike99? Some random text here.";
    const targetWords = originalText.match(/@[a-zA-Z0-9.]+\b/g) || [];
    const result = targetWords.join(' ');
    console.log(result); // 输出: @emma.jones @mike99
    
方案2:替换删除非目标内容

如果你更习惯用“替换清空”的方式,可以用这个正则匹配所有不需要保留的内容,然后替换为空字符串:

正则表达式(记得开启全局匹配g,如果文本有换行还需要开启单行模式s):

(?:(?!@[a-zA-Z0-9.]+\b).)+

比如在 VS Code 这类编辑器里操作:

  • 打开查找替换面板,勾选「正则表达式」和「全局匹配」
  • 查找框输入上面的正则,替换框留空,点击「全部替换」就行

为啥你之前的?!没用?

你尝试的负前瞻(?!...)是断言工具,它只负责检查“当前位置后面有没有符合规则的内容”,但不会实际匹配(消耗)任何字符。单独用它没法选中要删除的内容,得把它和字符匹配结合起来——就像方案2里的正则那样,用(?:(?!目标模式).)+来匹配一整串“不包含目标@单词”的内容,这样才能替换删掉它们。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:12:20