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

Match everything outside of two strings

对于

输入
*something here*another stuff here

我想匹配两个星号 (*) 之外的所有内容。

正则表达式后的预期输出

another stuff here

我想出了如何匹配 (*) /(?<=\*)(.*)(?=\*)/ 内部的所有内容,但我无法匹配外部的所有内容。注意到我不想匹配 *.

您可以删除星号和 trim 之后的字符串之间的子字符串:

s.replace(/\*[^*]*\*/g, '').trim()
s.replace(/\*.*?\*/g, '').trim()

参见regex demo

详情

  • \* - 一个星号
  • [^*]* - 除了星号
  • 之外的任何零个或多个字符
  • .*? - 除换行字符外的任何零个或多个字符,尽可能少(注意:如果您使用 .*,您将在字符串在星号之间有多个子字符串的情况)
  • \* - 一个星号

查看 JavaScript 演示:

console.log("*something here*another stuff here".replace(/\*[^*]*\*/g, '').trim())
// => another stuff here

您可以 split 带有 * anything * 的字符串,然后 join 字符串以获得结果。

const mystring = "*something here*another stuff here";

const result = mystring.split(/[*].*[*]/).join("");
console.log(result);