Я работаю на арабско-русском словаре.И у меня есть не очень хорошо организованный текст статей, который я хочу разделить на отдельные поля.Я написал код, который сделал это, и теперь я хочу улучшить его.Вот как это работает сейчас.Когда я нажимаю «авторедактирование», он разрезает простой текст на разумные части: переводы и примеры.

Вот код, который это делает:
function parseArticle(text, word) {
var newTranslations = [];
translations0 = text.split(/\d+\s*?\)/g); //raw array with translations
var match = "";
//\u0621-\u064A - arabic symbols
var example_pattern = /;([\s]+?[\!\?\*\~\u0621-\u064A]+?[\s\S]+?)(;|$)/gi;
translations0.forEach(function(elem, index) {
if (elem.trim()) {
var examples = [];
var translation = "";
var examplesBeginnigIndex = elem.search(example_pattern);
if (examplesBeginnigIndex > -1) translation = elem.substring(0, examplesBeginnigIndex);
else translation = elem.trim();
while ((match = example_pattern.exec(elem))) {
var exampleString = match[1];
//\u0400-\u04FF - cyrillic symbols
translationBeginningIndex = exampleString.search(/\(?[\u0400-\u04FF]/);
var example = exampleString.substring(0, translationBeginningIndex).trim();
example = reverseAndReplaceTilda(example, word);
var exTranslation = exampleString.substring(translationBeginningIndex).trim();
examples.push({ example, translation: exTranslation });
example_pattern.lastIndex--;
}
newTranslations.push({ translation, examples });
}
});
return newTranslations;
}
Проблема в том, что мой код убивает иногда ценные данные.Я хочу переписать это.Просто предварительно отформатируйте текст, добавив новые строки "\ n" перед каждым новым переводом и примером ... Я хочу использовать articleText.search(regexOfTranslation or regexOfExample)
(который дает мне индекс соответствия), а затем просто поставить линейный тормоз для каждого найденного индекса,Но search
дает только первый индекс совпадения.И мой regexPattern содержит символы до и после поиска шаблона.И когда я нахожу его один раз, следующий не совпадает (потому что предыдущая часть «съела» следующей, например, ;(my_pattern);
, - «;» в конце шаблона съедена, но она мне нужна для поиска следующего соответствия... В exec
есть lastIndex, который я могу уменьшить. Но как это сделать с search
. Или как мне лучше достичь своей цели? Вы можете увидеть в коде, что я использовал search
,match
, exec
, но все это работает по-разному, и я застрял.
Если кто-то хочет проверить, вот ввод и желаемый вывод:
<textarea class="inputData">
1) входить; 2) проникать (куда فى ); 3) вступать (куда вин.п. или فى ); быть составной часть (чего), быть включенным (куда فى); الجامعة ~ поступить в университет; الجمعيّة ~ вступить в члены общества; على عامه العاشر ~ ему пошёл десятый год; معه فى مفاوضات ~ вступить с кем-л. переговоры. 4) заходить, приходить (к кому على); 5) вводить (кого ب ); * ـه الشكّ ~ у него закралось сомнение; فى عقله ~ страд. у него помутился рассудок; على زوجته ~ вступить в супружеские права; ( قيد الخدمة ( العمل ~ войти в строй ( напр. о заводе)
</textarea>
<textarea class="outputData">
1) входить;
2) проникать (куда فى );
3) вступать (куда вин.п. или فى ); быть составной часть (чего), быть включенным (куда فى);
الجامعة ~ поступить в университет;
الجمعيّة ~ вступить в члены общества;
على عامه العاشر ~ ему пошёл десятый год;
معه فى مفاوضات ~ вступить с кем-л. переговоры.
4) заходить, приходить (к кому على);
5) вводить (кого ب );
ـه الشكّ ~ у него закралось сомнение;
فى عقله ~ страд. у него помутился рассудок;
على زوجته ~ вступить в супружеские права;
( قيد الخدمة ( العمل ~ войти в строй ( напр. о заводе)
</textarea>