.
JavaScript 문자열에서 모든 dot ( ) 을 바꾸고 싶습니다.
예를 들어, 나는 :
var mystring = 'okay.this.is.a.string';
나는 얻고 싶다 : okay this is a string
.
지금까지 나는 시도했다 :
mystring.replace(/./g,' ')
그러나 이것은 모든 문자열을 공백으로 바꿉니다.
.
JavaScript 문자열에서 모든 dot ( ) 을 바꾸고 싶습니다.
예를 들어, 나는 :
var mystring = 'okay.this.is.a.string';
나는 얻고 싶다 : okay this is a string
.
지금까지 나는 시도했다 :
mystring.replace(/./g,' ')
그러나 이것은 모든 문자열을 공백으로 바꿉니다.
답변:
.
정규 표현식에서 "임의의 문자"라는 의미를 갖기 때문에 이스케이프해야합니다 .
mystring = mystring.replace(/\./g,' ')
g
표현식의 끝에 있는 수정자가 사용되는 것입니다. 그것을 (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 :
유창한 인터페이스를 사용 하여이 작업을 수행 할 수있는 lib를 만들었습니다.
replace('.').from('okay.this.is.a.string').with(' ');
https://github.com/FagnerMartinsBrack/str-replace를 참조 하십시오 .
str.toLowerCase()
성능상의 이유로 루프 외부로 이동해야합니다 . 또한 검색중인 문자열을 조작하는 것이 최적이 아닙니다. 수정 된 버전으로 답변을 게시했습니다. stackoverflow.com/questions/2390789/…
이것은 더 간결하고 읽기 쉬우 며 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('&', '&')
. (
&
하므로 루프 에는 교체 할 항목이 절대로 없어지지 않습니다 (그리고 문자열은 계속 커집니다). 방금 시도한 결과 브라우저가 잠겼습니다.
다음은 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 = "내 이름은 George입니다";
var newText = myText.replaceAll ( "George", "Michael");
string.split(stringToFind).join(stringToReplace)
@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
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, "'");
}
createTextNode