Javascript Regex: захват между двумя звездочками с несколькими звездочками в строке через запятую - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь захватить все символы между несколькими экземплярами звездочек, разделенных запятой в строке. Вот пример строки:

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

Предостережение в том, что фраза должна начинаться и заканчиваться звездочкой. Я смог приблизиться с помощью следующего регулярного выражения, однако он не будет отбрасывать совпадений, если в захваченной строке отсутствует звездочка , начинающаяся с *1006* (*):

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 голосов
/ 22 января 2019

Вам нужно использовать звездочки на обоих концах шаблона и захватывать все 1 или более символов, кроме запятых и звездочек между:

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

См. Демоверсию regex

Детали шаблона

  • \* - звездочка
  • ([^,*]+) - Группа захвата 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...