[javascript] JavaScript에서 텍스트를 바꾸고 JavaScript에서 str_replace를 수행하려면 어떻게해야합니까?

str_replaceJavaScript의 일부 텍스트를 대체 하기 위해 또는 이와 유사한 대안 을 사용하고 싶습니다 .

var text = "this is some sample text that i want to replace";
var new_text = replace_in_javascript("want", "dont want", text);
document.write("new_text");

주어야한다

this is some sample text that i dont want to replace

정규식을 사용하려는 경우 내장 대체 방법과 비교하여 성능에 미치는 영향은 무엇입니까?



답변

문자열 교체에 정규식을 사용하면 문자열 교체를 사용하는 것보다 속도가 훨씬 느립니다. JSPerf 에서
설명 했듯이 정규 표현식을 만드는 데 다른 수준의 효율성을 가질 수 있지만 모든 것이 간단한 문자열 바꾸기보다 훨씬 느립니다. 다음과 같은 이유로 정규 표현식이 느려집니다 .

고정 문자열 일치에는 역 추적, 컴파일 단계, 범위, 문자 클래스 또는 정규식 엔진 속도를 늦추는 여러 가지 다른 기능이 없습니다. 정규식 일치를 최적화하는 방법은 확실히 있지만 일반적인 경우에는 색인을 문자열로 이길 가능성이 낮습니다.

JS perf 페이지에서 간단한 테스트 실행을 위해 몇 가지 결과를 문서화했습니다.

<script>
// Setup
  var startString = "xxxxxxxxxabcxxxxxxabcxx";
  var endStringRegEx = undefined;
  var endStringString = undefined;
  var endStringRegExNewStr = undefined;
  var endStringRegExNew = undefined;
  var endStringStoredRegEx = undefined;
  var re = new RegExp("abc", "g");
</script>

<script>
// Tests
  endStringRegEx = startString.replace(/abc/g, "def") // Regex
  endStringString = startString.replace("abc", "def", "g") // String
  endStringRegExNewStr = startString.replace(new RegExp("abc", "g"), "def"); // New Regex String
  endStringRegExNew = startString.replace(new RegExp(/abc/g), "def"); // New Regexp
  endStringStoredRegEx = startString.replace(re, "def") // saved regex
</script>

Chrome 68의 결과는 다음과 같습니다.

String replace:    9,936,093 operations/sec
Saved regex:       5,725,506 operations/sec
Regex:             5,529,504 operations/sec
New Regex String:  3,571,180 operations/sec
New Regex:         3,224,919 operations/sec

이 답변의 완전성을 위해 (주석에서 차용), .replace일치하는 문자의 첫 번째 인스턴스 만 교체 한다는 점을 언급 할 가치가 있습니다. 모든 인스턴스를로만 바꿀 수 있습니다 //g. 여러 인스턴스를 교체 name.replace(' ', '_').replace(' ', '_').replace(' ', '_');하거나 더 나쁜 경우 성능 균형 및 코드 우아함이 악화 될 수 있습니다.while (name.includes(' ')) { name = name.replace(' ', '_') }


답변

당신은 replace방법 을 사용할 것입니다 :

text = text.replace('old', 'new');

첫 번째 주장은 당신이 찾고있는 것입니다. 정규식도 사용할 수 있습니다.

원래 문자열은 변경 하지 않습니다 . 새 값만 반환합니다.


답변

더 간단하게 :

city_name=city_name.replace(/ /gi,'_');

모든 공백을 ‘_’로 바꿉니다!


답변

이 모든 방법은 원래 값을 수정하지 않고 새 문자열을 반환합니다.

var city_name = 'Some text with spaces';

첫 번째 공백 을 _로 바꿉니다.

city_name.replace(' ', '_'); // Returns: Some_text with spaces

정규식을 사용하여 모든 공백 을 _로 바꿉니다 . 정규식을 사용해야하는 경우 https://regex101.com/에서 테스트하는 것이 좋습니다.

city_name.replace(/ /gi,'_');  // Returns: Some_text_with_spaces 

정규식없이 모든 공백 을 _로 바꿉니다 . 기능적인 방법.

city_name.split(' ').join('_');  // Returns: Some_text_with_spaces


답변

다음과 같이 작성해야합니다.

var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want");
document.write(new_text);


답변

다른 사람들이 당신에게주는 코드는 한 번만 대체하지만 정규 표현식을 사용하면 모두를 대체합니다 (@sorgit와 같이). “want”를 “not want”로 바꾸려면 다음 코드를 사용하십시오

var text = "this is some sample text that i want to replace";
var new_text = text.replace(/want/g, "dont want");
document.write(new_text);

“new_text”변수는 “이것은 바꾸고 싶지 않은 샘플 텍스트입니다”가됩니다.

정규식에 대한 빠른 안내서를 보려면 여기를 방문하십시오.
http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
에 대한 자세한 내용은 https://developer.mozilla.org/를 참조str.replace() 하십시오.
en-US / docs / JavaScript / Reference / Global_Objects / String / replace
행운을 빕니다!


답변

해당 함수는 한 번의 발생 대체합니다 . 여러 발생을 대체해야하는 경우이 기능을 시도해야합니다.
http://phpjs.org/functions/str_replace:527

반드시 그런 것은 아닙니다. Hans Kesting의 답변을 참조하십시오.

city_name = city_name.replace(/ /gi,'_');