我想替换JavaScript字符串中出现的所有点(.)
例如,我有:
var mystring = 'okay.this.is.a.string';
我想要得到:这是一个字符串。
到目前为止,我尝试了:
mystring.replace(/./g,' ')
但这最终将所有字符串替换为空格。
我想替换JavaScript字符串中出现的所有点(.)
例如,我有:
var mystring = 'okay.this.is.a.string';
我想要得到:这是一个字符串。
到目前为止,我尝试了:
mystring.replace(/./g,' ')
但这最终将所有字符串替换为空格。
当前回答
var mystring = 'okay.this.is.a.string';
var myNewString = escapeHtml(mystring);
function escapeHtml(text) {
if('' !== text) {
return text.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/\./g,' ')
.replace(/"/g, '"')
.replace(/'/g, "'");
}
其他回答
你需要逃离。因为它在正则表达式中具有“任意字符”的含义。
mystring = mystring.replace(/\./g,' ')
补充(搜索,补充)[MDN]
".a.b.c.".replaceAll('.', ' ')
// result: " a b c "
// Using RegEx. You MUST use a global RegEx.
".a.b.c.".replaceAll(/\./g, ' ')
// result: " a b c "
replaceAll()用replaceWith替换所有出现的搜索。
它实际上与使用全局regex(*)的replace() [MDN]相同,在我的视图中,仅仅是replaceAll()更具可读性。
(*)表示它将匹配所有的事件。
重要(!)如果你选择regex:
当使用regexp时,你必须设置全局(“g”)标志; 否则,它将抛出TypeError: "replaceAll必须被调用 一个全局RegExp”。
还有一个很容易理解的解决方案:)
var newstring = mystring.split('.').join(' ');
/**
* ReplaceAll by Fagner Brack (MIT Licensed)
* Replaces all occurrences of a substring in a string
*/
String.prototype.replaceAll = function( token, newToken, ignoreCase ) {
var _token;
var str = this + "";
var i = -1;
if ( typeof token === "string" ) {
if ( ignoreCase ) {
_token = token.toLowerCase();
while( (
i = str.toLowerCase().indexOf(
_token, i >= 0 ? i + newToken.length : 0
) ) !== -1
) {
str = str.substring( 0, i ) +
newToken +
str.substring( i + token.length );
}
} else {
return this.split( token ).join( newToken );
}
}
return str;
};
alert('okay.this.is.a.string'.replaceAll('.', ' '));
比使用正则表达式快…
编辑: 也许在我写这段代码的时候,我没有使用jsperf。但最终这样的讨论是完全没有意义的,性能差异不值得代码在现实世界中的易读性,所以我的答案仍然有效,即使性能与正则表达式方法不同。
EDIT2: 我已经创建了一个库,允许您使用一个流畅的接口来做到这一点:
replace('.').from('okay.this.is.a.string').with(' ');
见https://github.com/FagnerMartinsBrack/str-replace。
str.replace(new RegExp(".","gm")," ")