учтите, что у меня есть текст типа:
Some text 1
`special text`
Some text 2
Я могу получить «специальный текст» с помощью регулярного выражения, но мне нужны и другие части текста в виде массива, примерно так:
[
Some text 1,
special text,
Some text 2
]
Я попробовал шаблон ниже, но думаю, что это не ответ
/(.*)\`(.*)\`(.*)/gm



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Мы можем попробовать использовать следующий шаблон регулярного выражения:
`.*?`|.+
В этом шаблоне указано соответствие:
.*? термин внутри обратных кавычек| ИЛИ.+ любой другой контентХитрость здесь заключается в том, чтобы сначала попытаться найти обратный апостроф. Только в этом случае мы потребляем остальную часть строки.
var input = `Some text 1
\`special text\`
Some text 2`;
var matches = input.match(/`.*?`|.+/g)
.map(x => x.replace(/^`|`$/g, ""));
console.info(matches);@EhsanHatefi Да, это действительно так, потому что предположим, что у вас в обратных кавычках более одного термина. В этом случае, если вы просто используете .*, он будет соответствовать всем условиям обратной кавычки. Нам не нужно такое поведение, мы хотим фиксировать данные до ближайшего обратного хода закрытия.
([^`]+): Соответствует любому тексту, который не находится в обратных кавычках.
`([^`]+)`: Сопоставляет текст в обратных кавычках.
const text = 'Some text 1 \`special text\` Some text 2';
const regex = /([^`]+)|`([^`]+)`/g;
const matches = [];
let match;
while ((match = regex.exec(text)) !== null) {
matches.push(match[1] || match[2]);
}
console.info(matches);Похоже, для этого вам не нужно регулярное выражение. Чтобы создать массив, split() строку с символом новой строки после удаления лишних ` символов:
const input = `Some text 1
\`special text\`
Some text 2`;
const output = input.replaceAll("`", "").split(/\n/g);
console.info(output);Если вам нужен какой-либо текст между обратным кавычком в начале и конце строки, вы можете использовать replace с группой захвата:
^`(.*)`$
Объяснение
^ Начало строки`(.*)` Захватите любого персонажа между двумя обратными кавычками.$ Конец строкиconst str = `Some text 1
\`special text\`
Some text 2`;
const regex = /^`(.*)`$/gm;
const result = str.replace(regex, `$1`).split("\n")
console.info(result);Чтобы не допускать никаких обратных кавычек между ними, вы можете использовать отрицательный класс символов, чтобы исключить совпадение обратных кавычек (и новой строки, если вы не хотите пересекать строки):
^`([^`\n]*)`$
const str = `Some text 1
\`special text\`
Some text 2`;
const regex = /^`([^`\n]*)`$/gm;
const result = str.replace(regex, `$1`).split("\n");
console.info(result);Для получения нескольких совпадений в одной строке, при условии, что нет других одиночных обратных кавычек и в вашей среде поддерживается просмотр назад, вы можете сопоставить либо все символы, кроме обратной кавычки, либо сопоставить одно и то же, но затем между обратными кавычками, используя обходные пути:
[^`\n]+|(?<=`)[^`\n]*(?=`)
Объяснение
[^`\n]+ Соответствует 1+ символам, кроме обратного кавычка или новой строки.| Или(?<=`)[^`\n]*(?=`) Сопоставление необязательных символов между двумя обратными кавычками.const str = `Some text 1
\`special text\`
Some text 2`;
const regex = /[^`\n]+|(?<=`)[^`\n]*(?=`)/g;
const result = str.match(regex)
console.info(result);
спасибо, это "?" необходимо в шаблоне?