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

使用正则表达式无法提取指定子串的问题求助

解决你的正则匹配问题

嘿,我来帮你搞定这个正则的小麻烦~

首先,咱们先搞清楚你原来的正则为什么没生效:你写的 /^[^\\]+/ 是想匹配开头所有不是反斜杠的字符,但你字符串里的 \r\n 是实际的换行控制字符,不是字面的 \ 符号,所以这个正则会一路匹配到字符串结尾——因为它根本找不到要排除的反斜杠嘛!

那要提取开头的 Shadowborn Apostle (带末尾空格),有两种简单的方法:

方法1:用正则精准匹配到第一个换行前的内容

你可以用非贪婪匹配加上正向预查,确保只取到第一个 \r\n 之前的部分:

s = "Shadowborn Apostle \r\nCreature — Human Cleric \r\nA deck can have any number Of \r\ncards named Shadowborn Apostle. \r\ne, Sacrifice six creatures named \r\nShadowborn Apostle: Search your \r\nlibrary for a Demon creature card \r\nand put it onto the battlefield. Then \r\nshuffle your library. \r\n"

match_result = s.match(/^.*?(?=\r\n)/)
puts match_result[0] # 输出:Shadowborn Apostle 

这个正则的意思是:

  • ^:从字符串开头开始匹配
  • .*?:非贪婪地匹配任意字符(避免一下子匹配到最后)
  • (?=\r\n):正向预查,当遇到 \r\n 时就停止匹配

方法2:用字符串分割更直观

其实如果只是取第一行内容,完全不用正则,直接用 split 分割换行符就行:

first_line = s.split("\r\n")[0]
puts first_line # 同样输出目标内容

如果你的需求就是精准提取 Shadowborn Apostle 这个固定字符串,也可以直接写 /^Shadowborn Apostle / 来匹配,不过上面两种方法更通用,哪怕换其他卡牌名也能生效~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:55:16