Захват персонажа перед регулярным выражением - PullRequest
0 голосов
/ 16 марта 2019

У меня есть быстрый вопрос о регулярном выражении, которое я написал в JavaScript. Это следующий (?<=,)(.*)(?=:), и он захватывает все между , и :. Однако я хочу, чтобы и сама запятая тоже получала, как в.

So,<< this is what my regex captures at the moment>>: end станет

So<<, this is what my regex captures at the moment>>: end.

Я пытался использовать . перед , в регулярном выражении, но, похоже, он не работает.

Ответы [ 3 ]

0 голосов
/ 16 марта 2019

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

,[^:]+

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

(,[^:]+):

Regex demo

Вы можете опустить положительный прогноз (?=:), просто сопоставив двоеточие, потому что вы уже используете группу захвата для получения совпадения.

const regex = /(,[^:]+):/;
const str = `So,<< this is what my regex captures at the moment>>: end`;
let res = str.match(regex);
console.log(res[1]);
0 голосов
/ 17 марта 2019

Как вы сказали:

Итак, << это то, что мое регулярное выражение захватывает в данный момент >>: конец станет Итак, <<, это то, что сейчас фиксирует мое регулярное выражение >>: конец.

вы можете использовать replace так:

var str = `So,<< this is what my regex captures at the moment>>: end`;
var replace = str.replace(/(.*?)(,)(<<)(.*)/,"$1$3$2$4");
console.log(replace);
0 голосов
/ 16 марта 2019

Используйте простую группу захвата - она ​​короче вашего текущего регулярного выражения и отлично работает:

var regex = /(,.*?):/g;
var string = "So,<< this is what my regex captures at the moment>>: end";
console.log(string.match(regex));

Пояснение:

() - обозначает группу захвата
, - соответствует запятой
.?* - соответствует любому количеству любых символов
: - соответствует запятой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...