如何保留方括号及内部内容并移除其他字符?正则表达式求助
解决方法
你需要从原字符串中提取出仅包含[10.00 FTE]的<strong>标签,以下是可行的正则方案:
一步到位替换(推荐)
直接用正则匹配所有冗余内容,替换为目标结果:
rowData.Q1.replace(/^.*<strong>.*?(\[.*?\])<\/strong>.*$/s, '<strong>$1</strong>')
正则说明:
^.*:匹配字符串开头到<strong>前的所有内容<strong>.*?:匹配<strong>标签和其后到方括号前的多余内容(非贪婪模式,避免过度匹配)(\[.*?\]):捕获方括号及其内部的核心内容(这是我们要保留的部分)<\/strong>.*$:匹配</strong>标签到字符串结尾的所有内容s修饰符:让.能匹配换行符,确保字符串有换行时也能正常处理
如果你的运行环境不支持s修饰符(比如旧版JavaScript),可以用[\s\S]代替.匹配所有字符:
rowData.Q1.replace(/^[\s\S]*<strong>[\s\S]*?(\[.*?\])<\/strong>[\s\S]*$/, '<strong>$1</strong>')
分两步处理(更直观)
如果觉得一步正则太复杂,可以拆成两步:
- 先清理
<strong>标签内的多余内容(去掉$183,361):
const cleanedInner = rowData.Q1.replace(/(<strong>).*?(\[.*?\])(<\/strong>)/, '$1$2$3')
- 再移除
<strong>标签外的所有内容:
const finalResult = cleanedInner.replace(/^.*?(<strong>.*?<\/strong>).*$/, '$1')
内容的提问来源于stack exchange,提问作者Ciaran Crowley
相关产品推荐
相关产品推荐

