Как заменить все точки в строке, используя JavaScript
Я хочу заменить все вхождения точки (.
) в строке JavaScript
Например, у меня есть:
var mystring = 'okay.this.is.a.string';
Я хочу получить: okay this is a string
,
Пока что попробовал:
mystring.replace(/./g,' ')
но это заканчивается тем, что вся строка заменяется пробелами.
18 ответов
Вам нужно сбежать .
потому что он имеет значение "произвольного символа" в регулярном выражении.
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(' ');
Для этого простого сценария я бы также рекомендовал использовать методы, встроенные в 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);
replaceAll(search, replaceWith)
[МДН ]
".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 "
заменяет ВСЕ вхождения
search
с
replaceWith
.
Это фактически то же самое, что и использование
replace()
[MDN] с глобальным регулярным выражением (*), просто
replaceAll()
на мой взгляд, немного читабельнее.
(*) Это означает, что он будет соответствовать всем вхождениям.
Важно( !), если вы выберете регулярное выражение:
при использовании
regexp
вы должны установить глобальный флаг ("g"); в противном случае он выдаст TypeError: «replaceAll должен вызываться с глобальным RegExp».
Это более лаконично / читабельно и должно работать лучше, чем опубликованное Фагнером Брэком (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. Надеюсь, это поможет кому-то.
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 ("Джордж", "Майкл");
String.prototype.replaceAll = function(character,replaceChar){
var word = this.valueOf();
while(word.indexOf(character) != -1)
word = word.replace(character,replaceChar);
return word;
}
Пример: я хочу заменить все двойные кавычки (") на одинарные кавычки ('), тогда код будет таким
var str= "\"Hello\""
var regex = new RegExp('"', 'g');
str = str.replace(regex, '\'');
console.log(str); // 'Hello'
String.prototype.replaceAll = function (needle, replacement) {
return this.replace(new RegExp(needle, 'g'), replacement);
};
@ Script сделал немного более кратким и без 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
Вы можете заменить любое вхождение любой строки / символа, используя объект javasscript RegExp.
Вот код,
var mystring = 'okay.this.is.a.string';
var patt = new RegExp("\\.");
while(patt.test(mystring)){
mystring = mystring .replace(".","");
}
let a = "жил-был король. оператор распространения. пусть. вер. константа.";
пусть данные = а. заменитьВсе (".","");
Ответ : data = "когда-то жил король, оператор спреда, пусть 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, "'");
}