我一直试图得到一个JavaScript regex命令,把类似“thisString”的东西变成“This String”,但我得到的最接近的是替换一个字母,导致类似“This String”或“This String”的东西。什么好主意吗?

为了澄清我可以处理大写字母的简单性,我只是不太擅长RegEx,把“somethingLikeThis”分割成“somethingLikeThis”是我遇到麻烦的地方。


当前回答

我认为这应该能够处理连续的大写字符以及简单的驼峰。

例如:somvariable => somvariable, but ABCCode != ABCCode。

下面的正则表达式不仅适用于您的示例,还适用于camcelCase中表示缩写的常见示例。

"somethingLikeThis"
    .replace(/([a-z])([A-Z])/g, '$1 $2')
    .replace(/([A-Z])([a-z])/g, ' $1$2')
    .replace(/\ +/g, ' ') => "something Like This"

"someVariableWithABCCode"
    .replace(/([a-z])([A-Z])/g, '$1 $2')
    .replace(/([A-Z])([a-z])/g, ' $1$2')
    .replace(/\ +/g, ' ') => "some Variable With ABC Code"

你也可以如上调整第一个字符的大写。

其他回答

我对此没什么兴趣,特别是在处理大写字母序列方面,比如xmlHTTPRequest。列出的函数会产生“Xml HTTPRequest”或“Xml HTTPRequest”,我的产生“Xml HTTPRequest”。

function unCamelCase (str){
    return str
        // insert a space between lower & upper
        .replace(/([a-z])([A-Z])/g, '$1 $2')
        // space before last upper in a sequence followed by lower
        .replace(/\b([A-Z]+)([A-Z])([a-z])/, '$1 $2$3')
        // uppercase the first character
        .replace(/^./, function(str){ return str.toUpperCase(); })
}

还有一个字符串。原型版本的一个要旨。

我认为这应该能够处理连续的大写字符以及简单的驼峰。

例如:somvariable => somvariable, but ABCCode != ABCCode。

下面的正则表达式不仅适用于您的示例,还适用于camcelCase中表示缩写的常见示例。

"somethingLikeThis"
    .replace(/([a-z])([A-Z])/g, '$1 $2')
    .replace(/([A-Z])([a-z])/g, ' $1$2')
    .replace(/\ +/g, ' ') => "something Like This"

"someVariableWithABCCode"
    .replace(/([a-z])([A-Z])/g, '$1 $2')
    .replace(/([A-Z])([a-z])/g, ' $1$2')
    .replace(/\ +/g, ' ') => "some Variable With ABC Code"

你也可以如上调整第一个字符的大写。

const value = 'camelCase';
const map = {};
let index = 0;
map[index] = [];
for (let i = 0; i < value.length; i++) {
  if (i !== 0 && value[i] === value[i].toUpperCase()) {
    index = i;
    map[index] = [];
  }
  if (i === 0) {
    map[index].push(value[i].toUpperCase());
  } else {
    map[index].push(value[i]);
  }
}
let resultArray = [];
Object.keys(map).map(function (key, index) {
  resultArray = [...resultArray, ' ', ...map[key]];
  return resultArray;
});
console.log(resultArray.join(''));
function spacecamel(s){
    return s.replace(/([a-z])([A-Z])/g, '$1 $2');
}

spacecamel(“somethingLikeThis”)

//返回值:Like This

"thisStringIsGood"
    // insert a space before all caps
    .replace(/([A-Z])/g, ' $1')
    // uppercase the first character
    .replace(/^./, function(str){ return str.toUpperCase(); })

显示

This String Is Good

(function() { const textbox = document.querySelector('#textbox') const result = document.querySelector('#result') function split() { result.innerText = textbox.value // insert a space before all caps .replace(/([A-Z])/g, ' $1') // uppercase the first character .replace(/^./, (str) => str.toUpperCase()) }; textbox.addEventListener('input', split); split(); }()); #result { margin-top: 1em; padding: .5em; background: #eee; white-space: pre; } <div> Text to split <input id="textbox" value="thisStringIsGood" /> </div> <div id="result"></div>