Javascript replace () с изменением регистра - PullRequest
6 голосов
/ 11 июня 2009

Есть ли простой способ изменить в случае совпадения строки с JavaScript?

Пример

Строка: <li>something</li>

Регулярное выражение: /<([\w]+)[^>]*>.*?<\/\1>/

И что я хотел бы сделать, это заменить совпадение $ 1 на все заглавные буквы (внутри замены, если это возможно). Я не совсем уверен, когда $ 1 является допустимым совпадением, а не строкой - '$ 1' .toUpperCase не работает.

Итак, как мне вернуться <LI>something</li>? Метод, а не регулярное выражение.

Ответы [ 2 ]

15 голосов
/ 11 июня 2009

Вы можете передать метод replace функцию заменителя. Первым аргументом для которого является полное совпадение, вторым будет 1 доллар. Таким образом:

mystring.replace(/<([\w]+)[^>]*>.*?<\/\1>/, function(a,x){ 
   return a.replace(x,x.toUpperCase()); 
})

хотя эта форма сохраняет дополнительную операцию, делая дополнительный захват (должен быть быстрее, но не проверен):

mystring.replace(/<([\w]+)([^>]*>.*?<\/\1>)/, function(a,x,y){ 
   return ('<'+x.toUpperCase()+y); 
})
0 голосов
/ 11 июня 2009

проще всего использовать совпадение с регулярным выражением, а затем использовать .toUpperCase для сопоставления. Я немного изменил регулярное выражение, чтобы добавить вторую группу захвата

var str = '<li>something</li>';
var arr = /<([\w]+)([^>]*>.*?<\/)\1>/.exec(str);
str = '<' + arr[1].toUpperCase() + arr[2] + arr[1].toUpperCase() + '>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...