Я хочу реализовать функцию, которая выводит соответствующие строки в виде массива из входной строки, такой как "str1 | str2 @ str3":
function myFunc(string) { ... }
Для ввода string
, однако, этонеобходимо только, чтобы str1
присутствовал.str2
и str3
(с их разделителями) являются необязательными.Для этого я уже написал регулярное выражение, которое выполняет своего рода разделение.Я не могу сделать (нормальное) разделение, потому что разделителями являются разные символы, а также важен порядок str1, str2 и str3.Это работает с моим шаблоном регулярных выражений.Теперь я пытаюсь расширить этот шаблон, чтобы вы могли экранировать два разделителя с помощью \ |или \ @.
Как именно я могу решить это лучше всего?
var strings = [
'meaning',
'meaning|description',
'meaning@id',
'meaning|description@id',
'|description',
'|description@id',
'@id',
'meaning@id|description',
'sub1\\|sub2',
'mea\\|ning|descri\\@ption',
'mea\\@ning@id',
'meaning|description@identific\\|\\@ation'
];
var pattern = /^(\w+)(?:\|(\w*))?(?:\@(\w*))?$/ // works without escaping
console.log(pattern.exec(strings[3]));
В соответствии с определением проблемы строки 0-3 и 8-11 должны быть действительными, а остальные - нет.myFunc(strings[3])
и должен вернуть ['meaning','description','id']
, а myFunc(strings[8])
должен вернуть [sub1\|sub2,null,null]