str.replace中的白名单

时间:2016-07-10 16:24:23

标签: javascript php html

我正在使用此代码替换所有拥有网站链接的人,他们的名字会改为无所谓,例如

Username - Somewebsite.com - > Username -

为此,我使用此代码:

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

但我希望在用户名字中使用我的网站地址时不要删除它,例如

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

2 个答案:

答案 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 : "";
});

FIDDLE

答案 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不支持。

我希望有所帮助!