Сделать одну букву в строчной строке, а все остальные буквы в верхнем регистре - PullRequest
1 голос
/ 04 августа 2020

Я пытаюсь сделать строку переменной в верхнем регистре и одну букву в нижнем регистре (). строка будет тем, что когда-либо введет пользователь, поэтому не знаю, что будет раньше времени.

примеры ввода пользователя

что введено

hello(K)

что ожидается результат

HELLO(k)

Что введено

(K)lear

ожидаемый результат

(k)LEAR

вот то, что я пробовал, но могу заставить его работать, только если () находятся в конце строки.

    if(getElementById("ID")){
        var headline = getElementById("ID").getValue();
        var headlineUpper = headline.toUpperCase();
        var IndexOf = headlineUpper.indexOf("(");
        if(IndexOf === -1){
            template.getRegionNode("Region").setValue(headlineUpper);
        }
        else{
            var plus = parseInt(IndexOf + 1);
            var replacing = headlineUpper[plus];
            var lower = replacing.toLowerCase();
            var render = headlineUpper.replace(headlineUpper.substring(plus), lower + ")");
            
            getElementById("Region").setValue(render);
        }
    }

Что делать с нашей системой, я могу использовать только vanilla javascript

Ответы [ 4 ]

1 голос
/ 04 августа 2020

Вы можете использовать замену регулярного выражения вместе с функцией для вычисления замены из групп захвата.

function convertParenCase(str) {
  return str.replace(/^([^(]*)(\([^)]*\))(.*)/,
    (match, g1, g2, g3) => g1.toUpperCase() + g2.toLowerCase() + g3.toUpperCase());
}

console.log(convertParenCase('hello(K)'));
console.log(convertParenCase('(K)lear'));
0 голосов
/ 04 августа 2020
let x = 'hello(K)'
x.toUpperCase().replace(/\(.+\)/g, x.match(/\(.+\)/g)[0].toLowerCase())

Вы можете преобразовать все в заглавные буквы, а затем, используя сопоставление с образцом, замените строку внутри скобок на нижний регистр (своего рода взлом)

и для случаев, когда вы можете или не можете получить скобка:

x.toUpperCase().replace(/\(.+\)/g, (x.match(/\(.+\)/g)?x.match(/\(.+\)/g)[0]:"").toLowerCase())
0 голосов
/ 04 августа 2020

Это легко сделать с помощью регулярного выражения.

if(getElementById("ID")){
    var headline = getElementById("ID").getValue();
    var headlineUpper = headline.toUpperCase();
    var textInBracket = headlineUpper.match(/\(.*\)/);
    if(textInBracket && textInBracket.length) {
       headlineUpper = headlineUpper.replace(textInBracket[0], textInBracket[0].toLowerCase())
    }
    template.getRegionNode("Region").setValue(headlineUpper);
}
0 голосов
/ 04 августа 2020

Вы можете обрабатывать три части строки по отдельности.

const convert = str => {
  let idx = str.indexOf('(');
  if(idx === -1){
    return str.toUpperCase();
  } else {
    return str.slice(0, idx).toUpperCase() + str.slice(idx, idx + 3).toLowerCase() + str.slice(idx + 3).toUpperCase();
  }
};
console.log(convert('hello(K)'));
console.log(convert('(K)lear'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...