I содержат следующие строки на персидском и английском языках.
1- روه جوانان خلاق
2- (نی (حمایت کننده رسانه های آزاد افغانستان
3- نی | حمایت ننده رسانه های آزاد افغانستان
4- NKCC (Строительная компания Нави Кундуз)
5- Услуги по развитию и регистрации в Афганистане
Я хочу получить первый алфавит из максимум 3 слов в каждом предложении. Что я пробовал:
\b(?:(?:[a-zA-Z0-9])|(?:[\u0621-\u0628\u062A-\u063A\u0641-\u0642\u0644-\u0648\u064E-\u0651\u0655\u067E\u0686\u0698\u06A9\u06AF\u06BE\u06CC]))
Выше регулярное выражение работает только для английского предложения, моя основная проблема связана с \b для персидского предложения и заставляет рассматривать только максимум 3 слова.
Также см. jsfiddle.net/74ufn709
@ WiktorStribiżew возвращает ), но мне нужен только алфавит
Нет, не "возвращает" ). Вам нужно только значение группы 1. См. jsfiddle.net/74ufn709
Итак, работает ли демонстрация кода для вас, или, пожалуйста, сообщите, что там не так.
@ WiktorStribiżew Итак, как мы можем сопоставить не более 3 слов?
@ WiktorStribiżew для меня ваша проблема с регулярным выражением связана с границей слова, например, если слово не содержит символов алфавита, таких как adfds-ds-dfs, оно принимает его как 3 слова, а также для тех слов, которые похожи на NKCC (Nawi Kunduz Construction Company), он возвращает ['N', '(N', 'K', 'K', 'C', 'C']
Что вы подразумеваете под «максимум 3 слова»? В моем фрагменте ( не возвращается вместе с N. Я не знаю, какой код вы используете.
@ WiktorStribiżew Моя цель - если в предложении больше трех слов, то получится первый алфавит из первых трех слов.
А если всего 1, 2 или 3 слова? Ничего не вернуть?
@ WiktorStribiżew Нет, менее 3 слов он должен возвращать первый алфавит всех слов, теперь проверьте мой вопрос, я приложил ваш ответ
Вы приложили скриншот теста regex101, выглядит некрасиво. В любом случае, как я уже сказал, Группа 1 - это все, что вам нужно. И чтобы получить первые 3, вы можете просто нарезать получившийся массив. Или ограничьте его популяцию при создании. См. this demo
@ WiktorStribiżew Спасибо, все работает.



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


Вы можете создать регулярное выражение, которое сначала соответствует началу строки или любому символу, кроме слова (букв и цифр) char, а затем захватывает первую букву / цифру, но собирает только первые 3 совпадения:
var strs = ["|گروه جوانان خلاق", "(نی (حمایت کننده رسانه های آزاد افغانستان", "نی | حمایت کننده رسانه های آزاد افغانستان", "NKCC (Nawi Kunduz Construction Company)","5- Afghanistan Development And Registry Services"];
var pblock = "\\u0621-\\u0628\\u062A-\\u063A\\u0641-\\u0642\\u0644-\\u0648\\u064E-\\u0651\\u0655\\u067E\\u0686\\u0698\\u06A9\\u06AF\\u06BE\\u06CC";
var rx = new RegExp("(?:^|[^a-zA-Z0-9" + pblock + "])([a-zA-Z0-9" + pblock + "])", "g");
for (var s of strs) {
var m, cnt=0, res=[];
while (m=rx.exec(s)) {
if (cnt < 3) {
res.push(m[1]);
cnt++;
} else break;
}
console.info(s, res);
}
Что-то вроде regex101.com/r/uzIRZa/1 (обратите внимание, что выделение арабского языка там не работает, просто посмотрите на панель MATCH справа)