Javascript正则表达式:以逗号分隔的字符串在两个星号之间捕获多个星号

时间:2019-01-21 23:39:21

标签: javascript regex

我正在尝试捕获星号的多个实例之间的所有字符,这些实例以字符串分隔,以逗号分隔。这是字符串的示例:

checkboxID0*,*checkboxID1*,&checkboxID2&,*checkboxID3*,!checkboxID4!,checkboxID5*

警告:该短语必须以星号开头和结尾。我可以使用以下正则表达式来接近,但是,当捕获的字符串缺少 开始 星号(*)时,它不会丢弃任何匹配项:< / p>

let str = "checkboxID0*,*checkboxID1*,&checkboxID2&,*checkboxID3*,!checkboxID4!,checkboxID5*"
const regex = /[^\,\*]+(?=\*)/gi;
var a = str.match(regex)
console.log(a) // answer should exclude checkboxID0 and checkboxID5

答案返回以下内容,但是,应排除“ checkboxID0和checkboxID5 ”,因为它不是以星号开头。

[
  "checkboxID0",
  "checkboxID1",
  "checkboxID3",
  "checkboxID5"
]

先谢谢了!

1 个答案:

答案 0 :(得分:1)

您需要在模式的两端都使用星号,并在其之间捕获除逗号和星号以外的所有1个或更多字符:

/\*([^,*]+)\*/g

请参见regex demo

模式详细信息

  • \*-星号
  • ([^,*]+)-捕获组1:除,*之外的一个或多个字符
  • \*-星号

JS演示:

var regex = /\*([^,*]+)\*/g;
var str = "checkboxID0*,*checkboxID1*,&checkboxID2&,*checkboxID3*,!checkboxID4!,checkboxID5*";
var m, res = [];
while (m = regex.exec(str)) {
    res.push(m[1]);
}
console.log(res);