#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
.