Google Script Apps - Используйте заглавные буквы в каждом слове входной строки в ячейке.
Я ищу решение, которое превращает каждое слово входной строки в заглавную, разделяя ее пробелом или точкой (аналогично proper
функция). Я знаю, что он сломан, но то, что я пробовал до сих пор:
/*Capitalize Firt Letter of Each Word of input String in Cell*/
if(activeRow > 1 && activeCol == 3 && ss.getSheetName() == validSheet && activeCell.isBlank() == false)
{
var inputVal = activeCell.getValue().toString();
Logger.log(inputVal);
activeCell.setFormulaR1C1("=PROPER("+inputVal+")");
}
Пример:
Вход для ячейки A2:
this tExt neEds to be fixed
Выход (желаемый результат) для ячейки A2:
This Text Needs To Be Fixed
заранее спасибо
Редактировать 1: я заметил, что правильная функция не будет работать, потому что она требует значения ячейки в нем.
2 ответа
Решение
Вот функция, которая берет строку и использует первую букву каждого слова:
function capitalizePhrase(phrase) {
var reg = /\b(\w)/g;
function replace(firstLetters) {
return firstLetters.toUpperCase();
}
capitalized = phrase.replace(reg, replace);
return capitalized;
}
который вы могли бы затем использовать следующим образом:
var inputVal = activeCell.getValue().toString();
var outputVal = capitalizePhrase(inputVal);
activeCell.setValue(outputVal);
Редактировать - если вы также хотите установить другие буквы в слове в нижний регистр, вы можете использовать эту функцию вместо:
function properCase(phrase) {
var regFirstLetter = /\b(\w)/g;
var regOtherLetters = /\B(\w)/g;
function capitalize(firstLetters) {
return firstLetters.toUpperCase();
}
function lowercase(otherLetters) {
return otherLetters.toLowerCase();
}
var capitalized = phrase.replace(regFirstLetter, capitalize);
var proper = capitalized.replace(regOtherLetters, lowercase);
return proper;
}
Я сделал по-другому, не знаю, лучше ли он, но, по крайней мере, он мне кажется проще:
// Cap the first letter and minimize all the others
function CapStrings(txt) {
var firstLetter = txt.slice(0,1).toUpperCase();
var othersLetters = txt.slice(1).toLowerCase();
var newTxt = firstLetter + othersLetters;
return newTxt;
}