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

如何用正则表达式提取[device]与[/device]标签间的字符串?

解决提取[device]标签内内容的正则问题

嘿,问题出在你没转义正则里的特殊字符!正则中[]是用来定义字符集合的,比如[abc]会匹配a、b、c中的任意一个字符,而不是完整的[abc]字符串。你之前写的[device]其实是在匹配d、e、v、i、c、e里的某一个字符,这当然取不到正确内容啦😅。

正确的正则写法

只需要把标签里的方括号用\转义,让正则把它们当成普通字符匹配就行:

单个匹配的情况

const str = "[device]Some device[/device]";
// 转义[],非贪婪匹配中间内容
const regex = /\[device\](.*?)\[\/device\]/i;
const result = regex.exec(str);
if (result) {
  console.log(result[1]); // 输出:Some device
}
  • \[device\]:匹配字面量[device]
  • (.*?):非贪婪模式匹配中间的任意内容(避免匹配到多个标签时的内容溢出)
  • \[\/device\]:匹配字面量[/device](在JS正则中,用/作为分隔符时,内部的/需要转义;也可以用RegExp构造函数,比如new RegExp("\\[device\\](.*?)\\[/device\\]", "i"))
  • i:可选参数,忽略大小写匹配(如果你的标签大小写不固定的话启用)

多个匹配的情况(比如字符串里有多个[device]标签)

如果要提取所有符合条件的内容,加上g全局匹配标识,循环获取结果:

const text = "[][/] [device]Some device[/device] [device]Another device[/device]";
const regex = /\[device\](.*?)\[\/device\]/gi;
let match;
while ((match = regex.exec(text)) !== null) {
  console.log(match[1]); // 依次输出:Some device、Another device
}

为啥之前的方案出错?

你提到的方案应该是针对没有特殊元字符的包裹字符串(比如用普通单词作为边界),而你的标签里含有[]这种正则特殊字符,必须转义后才能正确匹配字面量,否则正则会把[device]解析成字符集,导致匹配到错误的内容(比如你遇到的evice]Some device[/device,就是因为正则先匹配了[device]里的某个字符,然后把后面的内容都当成中间部分了)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:58:02