将字符串中的单词大写[重复]

2020/10/20 12:01 · javascript ·  · 0评论

将字符串中的单词大写的最佳方法是什么?

/**
 * 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在regexp匹配中也加了重音字母(在IE8和Chrome上测试),因此,像这样的字符串"località"会被大写错误地转换为"LocalitÀ"à大写字母由于regexp认为这是单词边界,所以大写

一个也可以用于重音字母的更通用的功能是:

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

您可以像这样使用它:

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

简洁的ES6方法可能看起来像这样。

const capitalizeFirstLetter = s => s.charAt(0).toUpperCase() + s.slice(1)

这只会大写第一个字母,不会影响句子其余部分的大小写。

Ivo的回答很好,但是我更喜欢不匹配,\w因为不需要大写0-9和AZ。我们可以忽略这些,仅在az上匹配。

'your string'.replace(/\b[a-z]/g, match => match.toUpperCase())
// => 'Your String'

这是相同的输出,但是我认为在自记录代码方面更加清晰。

由于每个人都向您提供了您所要求的JavaScript答案,因此我将介绍CSS属性text-transform: capitalize将完全做到这一点。

我意识到这可能不是您要的-您没有给我们提供运行此操作的上下文-但是,如果仅出于演示目的,我肯定会选择CSS替代方法。

jQuery的John Resig将John Gruber编写的perl脚本移植到JavaScript。该脚本以更智能的方式大写,例如,不大写“ of”和“ and”之类的小写字母。

您可以在这里找到它:JavaScript中的标题大写

使用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

如果您使用lodash在你的JavaScript应用程序,你可以使用_.capitalize

console.log( _.capitalize('ÿöur striñg') );
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>

我的解决方案:

String.prototype.toCapital = function () {
    return this.toLowerCase().split(' ').map(function (i) {
        if (i.length > 2) {
            return i.charAt(0).toUpperCase() + i.substr(1);
        }

        return i;
    }).join(' ');
};

例:

'álL riGht'.toCapital();
// Returns 'Áll Right'

这应该涵盖大多数基本用例。

const capitalize = (str) => {
    if (typeof str !== 'string') {
      throw Error('Feed me string')
    } else if (!str) {
      return ''
    } else {
      return str
        .split(' ')
        .map(s => {
            if (s.length == 1 ) {
                return s.toUpperCase()
            } else {
                const firstLetter = s.split('')[0].toUpperCase()
                const restOfStr = s.substr(1, s.length).toLowerCase()
                return firstLetter + restOfStr
            }     
        })
        .join(' ')
    }
}


capitalize('THIS IS A BOOK') // => This Is A Book
capitalize('this is a book') // => This Is A Book
capitalize('a 2nd 5 hour boOk thIs weEk') // => A 2nd 5 Hour Book This Week

编辑:改进了映射的可读性。

该解决方案不使用正则表达式,支持带重音符号的字符,几乎每个浏览器都支持。

function capitalizeIt(str) {
    if (str && typeof(str) === "string") {
        str = str.split(" ");    
        for (var i = 0, x = str.length; i < x; i++) {
            if (str[i]) {
                str[i] = str[i][0].toUpperCase() + str[i].substr(1);
            }
        }
        return str.join(" ");
    } else {
        return str;
    }
}    

用法:

console.log(capitalizeIt('çaoJava程序内部的第二个'));

输出:

Çao内部第二个Javascript程序

http://www.mediacollege.com/internet/javascript/text/case-capitalize.html是许多答案之一。

Google可以满足您解决此类问题的所有需求。

幼稚的方法是用空格将字符串分割,将结果数组的每个元素的首字母大写并将其重新连接在一起。剩下的就是现有的大写字母(例如,HTML保留HTML,不会像Html那样变得愚蠢)。如果您不希望这样,请在拆分之前将整个字符串变成小写。

该代码在点后大写单词:

function capitalizeAfterPeriod(input) { 
    var text = '';
    var str = $(input).val();
    text = convert(str.toLowerCase().split('. ')).join('. ');
    var textoFormatado = convert(text.split('.')).join('.');
    $(input).val(textoFormatado);
}

function convert(str) {
   for(var i = 0; i < str.length; i++){
      str[i] = str[i].split('');
      if (str[i][0] !== undefined) {
         str[i][0] = str[i][0].toUpperCase();
      }
      str[i] = str[i].join('');
   }
   return str;
}

我喜欢简单的过程。首先将字符串更改为Array以便于迭代,然后使用map函数根据需要更改每个单词。

function capitalizeCase(str) {
    var arr = str.split(' ');
    var t;
    var newt;
    var newarr = arr.map(function(d){
        t = d.split('');
        newt = t.map(function(d, i){
                  if(i === 0) {
                     return d.toUpperCase();
                    }
                 return d.toLowerCase();
               });
        return newt.join('');
      });
    var s = newarr.join(' ');
    return s;
  }

jQuery或Javascipt没有提供实现此目的的内置方法。

CSS测试转换(text-transform:capitalize;)并没有真正大写字符串的数据,而是在屏幕上显示了大写的渲染。

如果您正在寻找使用普通vanillaJS在数据级别实现此目标的更合法方法,请使用此解决方案=>

var capitalizeString = function (word) {    
    word = word.toLowerCase();
    if (word.indexOf(" ") != -1) { // passed param contains 1 + words
        word = word.replace(/\s/g, "--");
        var result = $.camelCase("-" + word);
        return result.replace(/-/g, " ");
    } else {
    return $.camelCase("-" + word);
    }
}

用这个:

String.prototype.toTitleCase = function() {
  return this.charAt(0).toUpperCase() + this.slice(1);
}

let str = 'text';
document.querySelector('#demo').innerText = str.toTitleCase();
<div class = "app">
  <p id = "demo"></p>
</div>

您可以使用以下命令将字符串中的单词大写:

function capitalizeAll(str){

    var partes = str.split(' ');

    var nuevoStr = ""; 

    for(i=0; i<partes.length; i++){
    nuevoStr += " "+partes[i].toLowerCase().replace(/\b\w/g, l => l.toUpperCase()).trim(); 
    }    

    return nuevoStr;

}

还有locutus:https ://locutus.io/php/strings/ucwords/以这种方式定义它:

function ucwords(str) {
  //  discuss at: http://locutus.io/php/ucwords/
  // original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
  // improved by: Waldo Malqui Silva (http://waldo.malqui.info)
  // improved by: Robin
  // improved by: Kevin van Zonneveld (http://kvz.io)
  // bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)
  // bugfixed by: Cetvertacov Alexandr (https://github.com/cetver)
  //    input by: James (http://www.james-bell.co.uk/)
  //   example 1: ucwords('kevin van  zonneveld')
  //   returns 1: 'Kevin Van  Zonneveld'
  //   example 2: ucwords('HELLO WORLD')
  //   returns 2: 'HELLO WORLD'
  //   example 3: ucwords('у мэри был маленький ягненок и она его очень любила')
  //   returns 3: 'У Мэри Был Маленький Ягненок И Она Его Очень Любила'
  //   example 4: ucwords('τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός')
  //   returns 4: 'Τάχιστη Αλώπηξ Βαφής Ψημένη Γη, Δρασκελίζει Υπέρ Νωθρού Κυνός'

  return (str + '').replace(/^(.)|\s+(.)/g, function ($1) {
    return $1.toUpperCase();
  });
};

我将为此使用正则表达式:

myString = '  this Is my sTring.  ';
myString.trim().toLowerCase().replace(/\w\S*/g, (w) => (w.replace(/^\w/, (c) => c.toUpperCase())));
本文地址:http://javascript.askforanswer.com/jiangzifuchuanzhongdedancidaxiezhongfu.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!