匹配两个字符串之外的所有内容
Posted
技术标签:
【中文标题】匹配两个字符串之外的所有内容【英文标题】:Match everything outside of two strings 【发布时间】:2021-08-04 10:32:46 【问题描述】:对于一个输入
*something here*another stuff here
我想匹配两个星号 (*) 之外的所有内容。
正则表达式后的预期输出:
another stuff here
我想出了如何匹配 (*) /(?<=\*)(.*)(?=\*)/
内部的所有内容,但我无法匹配外部的所有内容。注意到我不想匹配 *。
【问题讨论】:
为什么不删除*...*
? s.replace(/\*[^*]*\*/g, '')
这是个好主意,但我也想删除 *。
是的,你得到another stuff here
【参考方案1】:
您可以删除星号之间的子字符串并在之后修剪字符串:
s.replace(/\*[^*]*\*/g, '').trim()
s.replace(/\*.*?\*/g, '').trim()
请参阅regex demo。
详情
\*
- 一个星号
[^*]*
- 除星号外的任何零个或多个字符
.*?
- 除换行符之外的任何零个或多个字符,尽可能少(注意:如果您使用.*
,当字符串在星号之间有多个子字符串时,您将得到意外的输出 em>)
\*
- 一个星号
查看 javascript 演示:
console.log("*something here*another stuff here".replace(/\*[^*]*\*/g, '').trim())
// => another stuff here
【讨论】:
【参考方案2】:你可以split
字符串加上* anything *
然后join
字符串得到结果。
const mystring = "*something here*another stuff here";
const result = mystring.split(/[*].*[*]/).join("");
console.log(result);
【讨论】:
以上是关于匹配两个字符串之外的所有内容的主要内容,如果未能解决你的问题,请参考以下文章
除了给定字符串之外,匹配任何内容的 JavaScript 模式是啥? [复制]