#javascript #dart #split #string-matching
#javascript #dart #разделение #сопоставление строк
Вопрос:
У меня есть функция в Dart, которая использует регулярное выражение для обработки совпадающих и несовпадающих частей строки по-разному.
Future<List<String>> _getQuestionParts(String questionText) async {
List<String> parts = List();
questionText.splitMapJoin(
RegExp(r'amp;amp;[sS]*?S##'),
onNonMatch: (nonMatch) {
nonMatch = nonMatch.trim();
if (nonMatch.isNotEmpty) {
parts.add(_texToLatex(nonMatch));
}
return nonMatch;
},
onMatch: (match) {
String matchString = match.group(0);
parts.add(matchString);
return matchString;
},
);
for (int i = 0; i < parts.length; i ) {
String part = parts[i];
if (part.startsWith('amp;amp;') amp;amp; part.endsWith('##')) {
parts[i] = await _getBase64String(part, 'assets');
}
}
return parts;
}
Пример текста —
Общая энергия, запасенная в конденсаторной системе, показанной на рисунке, будет равна amp;amp;media/17.ЭЛЕКТРОСТАТИЧЕСКИЙ ПОТЕНЦИАЛ И ЕМКОСТЬ_12.jpegamp;amp;##media/17.ЭЛЕКТРОСТАТИЧЕСКИЙ ПОТЕНЦИАЛ И CAPACITANCE_12.txt##
Здесь две части, которые должны обрабатываться по-разному, являются —
1.
Общая энергия, запасенная в конденсаторной системе, показанной на рисунке, будет равна
amp;amp;media/17.ЭЛЕКТРОСТАТИЧЕСКИЙ ПОТЕНЦИАЛ И ЕМКОСТЬ_12.jpegamp;amp;##media/17.ЭЛЕКТРОСТАТИЧЕСКИЙ ПОТЕНЦИАЛ И CAPACITANCE_12.txt##
Есть ли способ получить эту функциональность в JavaScript?
Я думаю, что это будет комбинация разделения и сопоставления, но она должна возвращать совпадающие и несовпадающие части в их правильной последовательности.
Ответ №1:
Это было решено с помощью группы (скобки) при разделении —
var matches = text.split(/(amp;amp;[sS] ?amp;amp;##[sS] ?##)/gm);