Использование группы захвата в функции.split()
У меня есть строка, и я хочу разбить ее на массив, используя '|' символ, но не '\|':
var a = 'abc\&|\|cba';
var b = a.split(/([^\\])\|/);
результат:
b = ["abc", "&", "|cba"]
ожидаемый результат:
b = ["abc\&", "\|cba"]
По сути, я не могу правильно использовать группы захвата в функции.split().
3 ответа
Вы можете использовать позитивный взгляд на расщепление.
С обратной косой чертой
var a = 'abc\\&|\\|cba';
var b = a.split(/\|(?=\\)/);
console.log(b);
Без экранированной обратной косой черты
/\|(?=\|)/
\|
соответствует персонажу|
в прямом смысле(?=\|)
Позитивный взгляд - утверждают, что приведенное ниже регулярное выражение может быть сопоставлено\|
соответствует персонажу|
в прямом смысле
По сути, он ищет трубу и разбивается, если другая труба следует.
var a = 'abc\&|\|cba';
var b = a.split(/\|(?=\|)/);
console.log(b);
Вы можете сделать это следующим образом, используя выражения регулярных выражений, сохраняя каждое идентифицированное слово (в данном случае цену) в массиве, а затем захватывая его при необходимости.
var re = /(?:^|[ ])|([a-zA-Z]+)/gm;
var str = 'abc\&|\|cba';
var identifiedWords;
while ((identifiedWords = re.exec(str)) != null)
{
if (identifiedWords.index === re.lastIndex)
{
re.lastIndex++;
}
// View your result using the "identifiedWords" variable.
// eg identifiedWords[0] = abc\&
// identifiedWords[1] = cba
}
Я полагаю, у вас есть буквальный \
в ваших строках, и что ваш вопрос содержит опечатку во входном строковом литерале. В строках JS C необходимо использовать двойной \
определить обратную косую черту литерала (поскольку в обычных строковых литералах вы можете определить escape-последовательности, такие как \r
, \n
, так далее).
Ваше регулярное выражение должно соответствовать всем символам, кроме \
а также |
или любой буквальный \
сопровождается любым письмом. Если ваша строка может быть равна литералу \
, тебе нужно
var a = 'abc\\&|\\|cba';
b = a.match(/(?:[^\\|]|\\.?)+/g);
console.log(b);
Шаблон соответствует:
(?:
- (начало группы перехвата без захвата)[^\\|]
- любой символ, кроме\
а также|
|
- или же\\.?
- а\
с последующими 1 или 0 символами, кроме новой строки
)+
- 1 или более раз