Я пытаюсь разобрать строки с помощью JavaScript. Строки либо заключены в кавычки, либо представляют собой один символ =
.
Примеры:
"String 1" "String 2" "String 3"
"String 1" = "String 3"
"String 1" "String 2" =
"String 1" = =
Я обнаружил следующий шаблон RegEx, который охватывает только первый случай — по крайней мере, когда я использую его на RegExr, он не работает в JavaScript: (["'])(?:(?=(\\?))\2.)*?\1
Пример:
const re = /(["'])(?:(?=(\\?))\2.)*?\1/;
const str = '"String 1" "String 2" "String 3"';
re.exec(str);
//=> [""String 1"", """, "", index: 0, input: ""String 1" "String 2" "String 3"", groups: undefined]
Как я могу перевести этот шаблон для работы в JavaScript и как я могу добавить =
к шаблону?
Возьмите второй пример, я ожидаю три результата "String 1"
, =
и "String 3"
Предполагая, что вас не интересуют экранированные кавычки (например, "a\"b"
), тогда это регулярное выражение будет соответствовать строкам в кавычках или знакам равенства: "[^"]*"|'[^"]*'|=
. Вы можете использовать его как:
let input = `"String 1" "String 2" 'String 3' = = "string 4"`;
let matches = input.match(/"[^"]*"|'[^"]*'|=/g);
console.info(matches);
[
"\"String 1\"",
"\"String 2\"",
"'String 3'",
" = ",
" = ",
"\"string 4\""
]
Хотите сопоставить четные символы
=
? Нравится regex101.com/r/uUaETJ/2? Чтобы получить несколько совпадений, используйтеexec
в цикле, пока совпадение не будет найдено. Или используйтеs.match(/regex/g)
.