[javascript] 문자열에서 단어를 대문자로

문자열에서 단어를 대문자로 사용하는 가장 좋은 방법은 무엇입니까?



답변

/**
 * Capitalizes first letters of words in string.
 * @param {string} str String to be modified
 * @param {boolean=false} lower Whether all other letters should be lowercased
 * @return {string}
 * @usage
 *   capitalize('fix this string');     // -> 'Fix This String'
 *   capitalize('javaSCrIPT');          // -> 'JavaSCrIPT'
 *   capitalize('javaSCrIPT', true);    // -> 'Javascript'
 */
const capitalize = (str, lower = false) =>
  (lower ? str.toLowerCase() : str).replace(/(?:^|\s|["'([{])+\S/g, match => match.toUpperCase());
;

  • 앞에 공백이있는 첫 글자는 대문자가 아닌 Marco Demaio 의 솔루션을 수정 합니다.
capitalize(' javascript'); // -> ' Javascript'
  • 국가 상징과 악센트 문자를 처리 할 수 ​​있습니다.
capitalize('бабушка курит трубку');  // -> 'Бабушка Курит Трубку'
capitalize('località àtilacol')      // -> 'Località Àtilacol'
  • 따옴표와 중괄호를 처리 할 수 ​​있습니다.
capitalize(`"quotes" 'and' (braces) {braces} [braces]`);  // -> "Quotes" 'And' (Braces) {Braces} [Braces]


답변

문자열 내에서 단어를 대문자로 사용하는 가장 짧은 구현은 ES6의 화살표 함수를 사용하는 다음과 같습니다.

'your string'.replace(/\b\w/g, l => l.toUpperCase())
// => 'Your String'

ES5 호환 구현 :

'your string'.replace(/\b\w/g, function(l){ return l.toUpperCase() })
// => 'Your String'

정규식은 기본적으로 주어진 문자열 내에서 각 단어의 첫 글자와 일치하며 해당 글자 만 대문자로 변환합니다.

  • \ b 는 단어 경계 (단어의 시작 또는 끝)와 일치합니다.
  • \ w 는 다음 메타 문자 [a-zA-Z0-9]와 일치합니다.

비 ASCII 문자의 경우이 솔루션을 대신 참조하십시오.

'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())

이 정규 표현식은 첫 번째 문자와 공백이 아닌 모든 문자 앞에 주어진 문자열 내에서 공백을 일치시키고 해당 문자 만 대문자로 변환합니다.

  • \ s 는 공백 문자와 일치
  • \ S 는 공백이 아닌 문자와 일치
  • (x | y) 는 지정된 대안과 일치합니다.

캡처하지 않은 그룹은 여기에서 다음과 같이 사용될 수 있습니다. /(?:^|\s)\S/g하지만 g정규식 내의 플래그는 설계 상 하위 그룹을 캡처하지 않습니다.

건배!


답변

function capitalize(s){
    return s.toLowerCase().replace( /\b./g, function(a){ return a.toUpperCase(); } );
};

capitalize('this IS THE wOrst string eVeR');

출력 : “이것은 최악의 문자열입니다”

최신 정보:

이 솔루션이 내 솔루션을 대체하는 것으로 보입니다 : https://stackoverflow.com/a/7592235/104380


답변

VSYNC가 제공하는 대답은 작동 만큼 당신이 편지를 강조하지 않는 입력 문자열을.

이유를 모르지만 분명히 \b정규 표현식 일치 문자가 악센트 문자 (IE8 및 Chrome에서 테스트 됨)와 같이 문자열 "località"이 잘못 대문자로 변환됩니다"LocalitÀ" ( à문자가 대문자로 표시되어 정규 표현식이 단어 경계라고 생각합니다)

악센트 문자와 함께 작동 하는보다 일반적인 기능 은 다음 같습니다.

String.prototype.toCapitalize = function()
{
   return this.toLowerCase().replace(/^.|\s\S/g, function(a) { return a.toUpperCase(); });
}

다음과 같이 사용할 수 있습니다.

alert( "hello località".toCapitalize() );


답변

모든 사람이 요청한 JavaScript 답변을 제공 했으므로 CSS 속성 text-transform: capitalize이 정확히이 작업을 수행합니다.

나는 이것이 당신이 요구하는 것이 아닐 수도 있다는 것을 알고 있습니다 -당신은 우리에게 당신이 이것을 실행하는 어떤 맥락도주지 않았습니다-그러나 그것이 단지 프레젠테이션을위한 것이라면, CSS 대안으로 확실히 갈 것입니다.


답변

jQuery fame의 John Resig는 John Gruber가 작성한 perl 스크립트를 JavaScript로 이식했습니다. 이 스크립트는보다 지능적인 방식으로 대문자를 사용하며 ‘of’및 ‘and’와 같은 작은 단어는 대문자로 표시하지 않습니다.

여기에서 찾을 수 있습니다 : JavaScript에서 Title Capitalization


답변

JavaScript 및 HTML 사용

String.prototype.capitalize = function() {
  return this.replace(/(^|\s)([a-z])/g, function(m, p1, p2) {
    return p1 + p2.toUpperCase();
  });
};
<form name="form1" method="post">
  <input name="instring" type="text" value="this is the text string" size="30">
  <input type="button" name="Capitalize" value="Capitalize >>" onclick="form1.outstring.value=form1.instring.value.capitalize();">
  <input name="outstring" type="text" value="" size="30">
</form>

기본적으로 할 수 string.capitalize()있으며 각 단어의 첫 글자마다 대문자를 사용합니다.

출처 : http://www.mediacollege.com/internet/javascript/text/case-capitalize.html