我想替换 JavaScript 字符串中所有出现的点 (.
)
例如,我有:
var mystring = 'okay.this.is.a.string';
我想得到:okay this is a string
。
到目前为止,我尝试过:
mystring.replace(/./g,' ')
但这最终会将所有字符串替换为空格。
您需要转义 .
,因为它在正则表达式中具有“任意字符”的含义。
mystring = mystring.replace(/\./g,' ')
另一种易于理解的解决方案:)
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.toLowerCase()
移出循环。此外,操作您正在搜索的字符串可能不是最佳的。我发布了一个带有修改版本的答案:stackoverflow.com/questions/2390789/…
str.replace(new RegExp(".","gm")," ")
对于这个简单的场景,我还建议使用 javascript 中内置的方法。
你可以试试这个:
"okay.this.is.a.string".split(".").join("")
问候
我在点上添加双反斜杠以使其工作。欢呼。
var st = "okay.this.is.a.string";
var Re = new RegExp("\\.","g");
st = st.replace(Re," ");
alert(st);
这更简洁/可读,并且应该比 Fagner Brack 发布的更好(toLowerCase 不在循环中执行):
String.prototype.replaceAll = function(search, replace, ignoreCase) {
if (ignoreCase) {
var result = [];
var _string = this.toLowerCase();
var _search = search.toLowerCase();
var start = 0, match, length = _search.length;
while ((match = _string.indexOf(_search, start)) >= 0) {
result.push(this.slice(start, match));
start = match + length;
}
result.push(this.slice(start));
} else {
result = this.split(search);
}
return result.join(replace);
}
用法:
alert('Bananas And Bran'.replaceAll('An', '(an)'));
replaceAll(search, replaceWith)
[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()
将所有出现的 search
替换为 replaceWith
。
它实际上与使用带有全局正则表达式(*)的 replace()
[MDN] 相同,只是 replaceAll()
在我看来更具可读性。
(*) 表示它将匹配所有出现的事件。
重要(!)如果您选择正则表达式:
使用正则表达式时,您必须设置全局(“g”)标志;否则,它将抛出 TypeError:“replaceAll 必须使用全局 RegExp 调用”。
split('.').join('')
将其更改为 replace
。
String.prototype.replaceAll = function(character,replaceChar){
var word = this.valueOf();
while(word.indexOf(character) != -1)
word = word.replace(character,replaceChar);
return word;
}
replaceAll('&', '&')
? (诚然,这不是 OP 的问题)
&
所以循环永远不会用完要替换的东西(并且字符串会不断增长)。我刚刚试了一下,它锁定了我的浏览器......
这是replaceAll的另一个实现。希望它可以帮助某人。
String.prototype.replaceAll = function (stringToFind, stringToReplace) {
if (stringToFind === stringToReplace) return this;
var temp = this;
var index = temp.indexOf(stringToFind);
while (index != -1) {
temp = temp.replace(stringToFind, stringToReplace);
index = temp.indexOf(stringToFind);
}
return temp;
};
然后你可以使用它:
var myText = "我叫乔治"; var newText = myText.replaceAll("George", "Michael");
string.split(stringToFind).join(stringToReplace)
例子:我想把所有的双引号(")都换成单引号(') 那么代码会是这样的
var str= "\"Hello\""
var regex = new RegExp('"', 'g');
str = str.replace(regex, '\'');
console.log(str); // 'Hello'
@scripto 变得更加简洁,并且没有 prototype
:
function strReplaceAll(s, stringToFind, stringToReplace) {
if (stringToFind === stringToReplace) return s;
for (let index = s.indexOf(stringToFind); index != -1; index = s.indexOf(stringToFind))
s = s.replace(stringToFind, stringToReplace);
return s;
}
以下是它的叠加方式:http://jsperf.com/replace-vs-split-join-vs-replaceall/68
String.prototype.replaceAll = function (needle, replacement) {
return this.replace(new RegExp(needle, 'g'), replacement);
};
mystring.replace(new RegExp('.', "g"), ' ');
最简单的方法
"先生".split('.').join("");
.....................
安慰
https://i.stack.imgur.com/tYWHW.png
您可以使用 RegExp JavaScript 对象替换所有出现的任何字符串/字符。
这是代码,
var mystring = 'okay.this.is.a.string';
var patt = new RegExp("\\.");
while(patt.test(mystring)){
mystring = mystring .replace(".","");
}
let a = "曾经有一个国王。传播运算符。让。版本。常量。";
让数据 = a.replaceAll(".","");
答案:data = "曾经有一个king spread operator let ver const";
您需要在该字符串上使用 replaceAll() 方法。
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, "'");
}
createTextNode
g
修饰符的用途。将其视为(g)全局。