我正在使用此代码替换所有拥有网站链接的人,他们的名字会改为无所谓,例如
Username - Somewebsite.com
- > Username -
为此,我使用此代码:
name.replace(/([a-zA-Z0-9\-]*\.com)/g, '');
但我希望在用户名字中使用我的网站地址时不要删除它,例如
Username - Mywebsitename.com
- > Username - Mywebsitename.com
答案 0 :(得分: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 : "";
});
答案 1 :(得分: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)
正则表达式解释:
/ //-> 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不支持。
我希望有所帮助!