Выбор английских букв внутри строки с помощью букв RTL

#javascript #html #css

#javascript #HTML #css

Вопрос:

Я хочу изменить цвет всей английской строки в данном тексте:

 const english = /^[A-Za-z0-9]*$/;

function getColored(text) {
  let resu<
  result = text.replace(english, '<span class="colored">$1</span>');
  return resu<
}

const container = document.getElementById("container");
container.innerHTML = getColored("این یک متن دو زبانه هست English is included البته با تفاوت هایی This is English too");  
 .colored { color: #fc0303; }  
 <div id="container"></div>  

Проблема в том, что регулярное выражение по какой-то причине не выбирает английские буквы, как я могу это исправить?

Ответ №1:

Удалите символы ^ и $ из вашего регулярного выражения, замените * на a , добавьте g в конце и используйте группу захвата (у которой будет индекс 1, спасибо @pilchard!).

 const english = /([A-Za-z0-9] )/g;
  

Причинами этого являются:

  • ^ требуется, чтобы совпадение начиналось с начала строки, но вы хотите сопоставлять подстроки в любой позиции,
  • $ требуется, чтобы совпадение заканчивалось в конце строки, но вы хотите сопоставлять подстроки в любой позиции,
  • * соответствует 0 или более символам, но вы хотите сопоставить хотя бы один, что и делает,
  • g Флаг означает «глобальный», что означает, что вы находите все возможные совпадения, а не только первое.

Комментарии:

1. Теперь я получаю $1 вместо английских слов цвета…

2. При этом будет выбрано каждое слово по отдельности, а не все английское предложение.

3. @AyushMaheshwari Это правда, и я думал об этом, но я не хотел изменять содержимое регулярного выражения, только то, как оно применяется. Добавление необходимого s должно быть достаточно простым.

Ответ №2:

Вам нужно изменить ваше регулярное выражение (на английском языке). это должно быть /w[ws]*w/g

В вашем обычном выражении вы помещаете ^ и $ , которые делают его соответствующим всей строке. чего мы не хотим. Как /w[ws]*w/g работает :

  • w проверяет, что он должен начинаться с [a-zA-Z0-9]
  • [ws]* проверяет, что он также может содержать [a-zA-Z0-9] или пробел.
  • w затем проверяется, что оно должно заканчиваться на [a-zA-Z0-9]
  • g в конце проверяется, что он не должен останавливаться после первого появления.

Комментарии:

1. w также соответствует символам подчеркивания _ , а не только [A-Za-z0-9] . Это также не будет работать для одно- или двухсимвольных строк, таких как I или am .