Как заменить все точки в строке с помощью JavaScript
Я хочу заменить все вхождения точки (.
) в строке JavaScript
например, у меня есть:
var mystring = 'okay.this.is.a.string';
Я хочу сделать: okay this is a string
.
до сих пор я пытался:
mystring.replace(/./g,' ')
но это заканчивается тем, что все строки заменяются пробелами.
14 ответов:
вы должны избежать
.
потому что он имеет значение "произвольный символ" в регулярном выражении.mystring = mystring.replace(/\./g,' ')
/** * 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('.', ' '));
быстрее, чем с помощью regex...
EDIT:
Возможно, в то время, когда я делал этот код, я не использовал jsperf. Но в конце концов такое обсуждение совершенно бессмысленно, разница в производительности не стоит разборчивости кода в реальном мире, поэтому мой ответ все еще действителен, даже если производительность отличается от подхода регулярных выражений.EDIT2:
Я создал lib, который позволяет вам делать это с помощью fluent интерфейс: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);
это более лаконично / читабельно и должно работать лучше, чем тот, который опубликовал 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)'));
String.prototype.replaceAll = function(character,replaceChar){ var word = this.valueOf(); while(word.indexOf(character) != -1) word = word.replace(character,replaceChar); return word; }
вот еще одна реализация 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.заменяет("Джордж", "Майкл");
пример: я хочу заменить все двойные кавычки ( ") в одинарные кавычки ( ' ), то код будет выглядеть так
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); };
вы можете заменить все вхождения любой строки / символа с помощью объекта RegExp javasscript.
здесь код
var mystring = 'okay.this.is.a.string'; var patt = new RegExp("\."); while(patt.test(mystring)){ mystring = mystring .replace(".",""); }
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, "'"); }
Comments