如何使用JavaScript
我想更换一个点(.
)的所有出现在JavaScript字符串如何使用JavaScript
例如替换字符串中的所有点,我有:
var mystring = 'okay.this.is.a.string';
我想得到:okay this is a string
。
到目前为止,我尝试:
mystring.replace(/./g,' ')
但最终与替换为空格的所有字符串。
还有一个解决方案,它是很容易理解:)
var newstring = mystring.split('.').join(' ');
@HaggleLad因为你不需要乱用正则表达式 – 2012-04-04 03:30:21
这是不是比regexing慢? – 2012-06-06 14:10:35
@Jasper从我的理解中,它在大多数浏览器中实际上更快,尽管我自己并没有真正对它进行基准测试。 – andrew 2012-06-26 21:58:47
/**
* 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:
我已经创建了一个lib,允许你做这个用流利的接口:
非常有用。仅供参考:警报声明中的分号后面有流氓字符。 – Patrick 2012-11-27 11:24:29
“流氓角色”是什么意思? – 2013-02-06 23:09:09
他意味着实体​两次,这是Unicode字符“零宽度空间”(U + 200B)。更多关于http://www.fileformat.info/info/unicode/char/200b/index.htm的信息 – 2013-02-07 14:07:17
我给点加了双反斜杠使之起作用。欢呼。
var st = "okay.this.is.a.string";
var Re = new RegExp("\\.","g");
st = st.replace(Re," ");
alert(st);
String.prototype.replaceAll = function(character,replaceChar){
var word = this.valueOf();
while(word.indexOf(character) != -1)
word = word.replace(character,replaceChar);
return word;
}
不会陷入无限循环,如果你给它像这样的东西:'replaceAll('&','&')'? (承认这不是OP的问题) – Anentropic 2013-06-17 14:19:50
但是“&”包含一个'&',所以循环永远不会耗尽要替换的东西(并且字符串不断增长)。我刚刚尝试过,它锁定了我的浏览器... – Anentropic 2013-07-03 09:46:57
这里的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;
};
然后你可以使用它:
会将myText VAR = “我的名字是乔治”;
var newText = myText。replaceAll(“George”,“Michael”);
这不处理不区分大小写的搜索/替换。所以它在功能上等同于:'string.split(stringToFind).join(stringToReplace)' – sstur 2013-05-21 04:09:47
这是更简洁/可读应该执行一个比张贴由法格纳布拉克(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)'));
实际上,它看起来会被转义RegEx比indexOf更好!听起来不对,但JSPerf表明它更快: http://jsperf.com/replaceall-indexof-vs-regex – sstur 2013-05-21 05:27:39
也许当时我做了代码,我没有使用jsperf。但最终这样的讨论完全没有意义,性能差异不值得现实世界中代码的易读性,所以我的答案仍然有效。 – 2014-01-16 20:32:55
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, "'");
}
要转义HTML,请使用'createTextNode' – Downgoat 2015-06-23 04:09:04
对于此简单的情况下,我也建议使用JavaScript中内置的方法。
你可以试试这个:
"okay.this.is.a.string".split(".").join("")
问候
例如:我想更换所有双引号(“)转换成单引号('),然后代码会是这样
var str= "\"Hello\""
var regex = new RegExp('"', 'g');
str = str.replace(regex, '\'');
console.log(str); // 'Hello'
您可以使用RegExp javasscript对象替换所有出现的任何字符串/字符。
下面是代码,
var mystring = 'okay.this.is.a.string';
var patt = new RegExp("\\.");
while(patt.test(mystring)){
mystring = mystring .replace(".","");
}
@的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);
};
aefxx的答案是正确的,但正如“供参考”一样,正则表达式中的周期字符意味着匹配所有东西,因此所有东西都是空间。使用反斜杠进行转义意味着匹配时段。 – swilliams 2010-07-27 16:52:48
感谢您的提示。使用Regex我有一些AHA时刻(当构建应用程序时)。我真的很讨厌它* _ *,你有一些很酷,很好的教程吗? – 2010-07-31 01:32:03
rubular.com是你正在寻找的 – LanguagesNamedAfterCofee 2012-07-17 15:41:44