Форматируйте строку в нижнем регистре так, чтобы начало каждого предложения было заглавным.

У меня есть строка вроде

FIRST SENTENCE. SECOND SENTENCE.

Я хочу, чтобы строка была строчной, чтобы первая буква каждого предложения была заглавной.

Например:

string = string.toLowerCase().capitalize();

только первое предложение пишется с заглавной буквы.

у меня есть

String.prototype.capitalize = function () {вернуть this.charAt (0) .toUpperCase () + this.slice (1); }

функция

Кто-нибудь знает как решить?


person zsola3075457    schedule 07.12.2013    source источник


Ответы (4)


Если вы хотите использовать только первое слово каждого предложения (а не каждое слово), используйте эту функцию:

function applySentenceCase(str) {
    return str.replace(/.+?[\.\?\!](\s|$)/g, function (txt) {
        return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
    });
}

JSFiddle здесь

Если вы хотите сохранить форматирование остальной части предложения и использовать только первые буквы с заглавной буквы, измените txt.substr(1).toLowerCase() на txt.substr(1)

person r3mainer    schedule 07.12.2013
comment
И в чем разница, если я использую replace (/ \ w \ S * / g, function (txt) вместо вашего кода? Спасибо. - person zsola3075457; 07.12.2013
comment
@ zsola3075457 Это поместит заглавную букву в начало каждого слова: jsfiddle.net / VAKk8 / 1 - person r3mainer; 07.12.2013
comment
Используйте /.+?([\.\?\!]\s|$)/g, чтобы он работал и с одинарными / заканчивающимися предложениями без знаков препинания. - person Bjørn Egil; 22.08.2017
comment
function applySentenceCase (str) {return str.toLowerCase (). replace (/ (^. | \. \ s. | \! \ s. | \? \ s.) / g, function (txt) {return txt.toUpperCase ();}); } - person Ovidiu Badita; 18.12.2017

Попробуй это

function toTitleCase(str) {
    return str.replace(/\w\S*/g, function (txt) {
        return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
    });
}

alert(toTitleCase('FIRST SENTENCE. SECOND SENTENCE.'))

ДЕМО

С помощью справки

person Satpal    schedule 07.12.2013

Эта функция JS применяет регистр предложений к начальному предложению и любым предложениям, следующим за предложением, которое заканчивается на. ? !

function applySentenceCase(str) {
    var txt = str.split(/(.+?[\.\?\!](\s|$))/g);
    for (i = 0; i < (txt.length-1); i++) {
        if (txt[i].length>1){
            txt[i]=txt[i].charAt(0).toUpperCase() + txt[i].substr(1).toLowerCase();
        } else if (txt[i].length==1) {
            txt[i]=txt[i].charAt(0).toUpperCase();
        }
    }
    txt = txt.join('').replace(/\s\s/g,' ');
    return txt;
}

alert(applySentenceCase("LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISCING ELIT. sed congue hendrerit risus, ac viverra magna elementum in. InTeRdUm Et MaLeSuAdA fAmEs Ac AnTe IpSuM pRiMiS iN fAuCiBuS. phasellus EST purus, COMMODO vitae IMPERDIET eget, ORNARE quis ELIT."));

person John    schedule 05.12.2018

Я думаю это сработает для тебя

<a style="cursor:pointer;" onclick="capitaliseFirstLetter('hey wassup baby')">asd</a>

<div type="text" id="texts"></div>

JavaScript

    function capitaliseFirstLetter(string)
{
    var array = string.split(" ");
    for(i=0;i<array.length;i++){
        var n = array[i];
        var a = n.charAt(0).toUpperCase() + n.slice(1);
        alert(a);
    }

}

посетите: http://jsfiddle.net/rVnFU/

person kushal jain    schedule 07.12.2013
comment
Извините, я забыл, но у меня уже есть эта функция, это только первое предложение с заглавной буквы. - person zsola3075457; 07.12.2013