匹配两个字符串之外的所有内容

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);

【讨论】:

以上是关于匹配两个字符串之外的所有内容的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式,匹配除 \r \n 之外的所有内容作为普通字符

匹配除以单词开头之外的所有内容的模式[重复]

正则表达式 - 如何匹配除特定模式之外的所有内容

除了给定字符串之外,匹配任何内容的 JavaScript 模式是啥? [复制]

javascript正则表达式匹配两个字符串之间的所有内容(没有换行符)[重复]

正则表达式匹配除 5 之外的所有数字字符