2016-07-10 9 views
0

Я использую этот код, чтобы заменить всех, кто имеет веб-сайт ссылку в Называют изменить его ни к чему, например,Белый список в str.replace

Username - Somewebsite.com ->Username -

Для этого я использую этот код:

name.replace(/([a-zA-Z0-9\-]*\.com)/g, ''); 

Но я хочу сделать это так, когда пользователь использует свой веб адрес в их названии, чтобы не удалить его, например

Username - Mywebsitename.com ->Username - Mywebsitename.com

+0

Ну, если я удаляю его, он удаляется для ** someotherwebsite.com **. У меня есть ссылка, чтобы быть включенной в белый список. –

+0

Эй, спасибо за ответ, он должен быть .com, я скопировал его неправильно. –

+0

Пила ваш комментарий, прося @adeneo для перехода по Skype, для пользователей здесь нередко предоставляется такая помощь. Попытайтесь продвигаться вперед самостоятельно, используя любую стратегию, которая, по вашему мнению, лучшая, и размещайте больше вопросов здесь о переполнении стека, когда вы застреваете. Если ваш вопрос ясен и продуман, кто-то всегда будет рад помочь. –

ответ

2

Самых простой бы просто использовать функцию обратный вызов для replace() и отсеять матчи на определенную строке

var mySite = 'Somewebsite.com'; 

var name = "Username - Somewebsite.com"; 

var result = name.replace(/([a-zA-Z0-9\-]*\.com)/g, function(what) { 
    return what === mySite ? what : ""; 
}); 

FIDDLE

+0

Привет большое спасибо за ответ. Но с использованием этого 'name = name.replace (/ ([a-zA-Z0-9 \ -] * \. Com)/g, '');' 'name = name.replace (/ ([ a-zA-Z0-9 \ -] * \. net)/g, ''); ' ' name = name.replace (/ ([a-zA-Z0-9 \ -] * \. us)/g, ''); ' ' name = name.replace (/ ([a-zA-Z0-9 \ -] * \ .gg)/g, ''); ' доменное имя моего сайта: CSGO -Sharks.com. Если они используют мой домен в имени, строка не должна ничего делать. Но если они используют что-то вроде CSGOWild.com, оно должно заменить его на ничего. –

+0

Тогда почему бы не обернуть все эти странные замены в условие 'if', например' if (name.indexOf ("CSGO-Sharks.com") === -1) {replace stuff} ' – adeneo

+0

Привет, я могу добавить вы в скайпе, пожалуйста? –

0

Почти чистое регулярное выражение решение:

/\s+\-\s+(?!Mywebsite\.com)([a-zA-Z0-9\-]+)\.com/i 

Рабочего пример:

var regex = /\s+\-\s+(?!Mywebsite\.com)[a-zA-Z0-9\-]+\.com/i 
 

 
var string = 'Username - Somewebsite.com' 
 
var output = 'Username -' 
 
console.log('Match:', string) 
 
console.log('Result:', string.replace(regex, ' -')) 
 
console.log('Correct:', (string.replace(regex, ' -') === output) === true) 
 
console.log('') // new line 
 

 
var string = 'Username - Mywebsite.com' 
 
var output = 'Username - Mywebsite.com' 
 
console.log('Match:', string) 
 
console.log('Result:', string.replace(regex, ' -')) 
 
console.log('Correct:', (string.replace(regex, ' -') === output) === true)

Regex Объяснение:

/ //-> open regex 
    \s+ //-> match one or more spaces 
    \- //-> match one literal dash 
    \s+ //-> match one or more spaces 
    (?!Mywebsite\.com) //-> look ahead & assert next match is not "Mywebsite.com" 
    ([a-zA-Z0-9\-]+) //-> match one or more lower or upper case letter, digits, & dot 
    \. //-> match literal dot 
    c //-> match c 
    o //-> match o 
    m //-> match m 
///-> close regex 
i //-> make search case insensitive 

Посмотрите сзади, вероятно, было больше подходит для этого, но это не поддерживается JavaScript.

Я надеюсь, что это поможет!

+0

Спасибо за ваш ответ. –

+0

Не проблема! Подумайте о том, как правильно выбрать ответ, который наиболее близок к тому, что вы искали, нажав на серый галочку в верхнем левом углу сообщения. –

Смежные вопросы