web-dev-qa-db-ja.com

Javascript / jQuery:キャメルケース文字列を分割し、スペースではなくハイフンを追加

私はこれが正規表現の複数の部分の状況だと想像しますが、大文字でキャメルケース文字列を分割して小文字にし、各新しい文字列の間にハイフンを追加するにはどうすればよいですか?

例えば:

thisString

になるだろう:

このひも

57
user1048007

次のようなものを試してください:

var myStr = 'thisString';

myStr = myStr.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
123
Wouter J

答えるのは遅くなりますが、この解決策は、1文字がキャメルケースの場合に有効です。

'thisIsATest'.replace(/([a-zA-Z])(?=[A-Z])/g, '$1-').toLowerCase();  // this-is-a-test
19
Syon

以下を試してください:

var token = document.getElementsByTagName('strong')[0].innerHTML,
    replaced = token.replace(/[a-z][A-Z]/g, function(str, offset) {
       return str[0] + '-' + str[1].toLowerCase();
    });

alert(replaced);

例- http://jsfiddle.net/7DV6A/2/

文字列replace関数のドキュメント:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace

5
xandercoded
String.prototype.camelCaseToDashed = function(){
  return this.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
}
// Usage
"SomeVariable".camelCaseToDashed();
1
Bilal Iqbal

これらのソリューションがすべて非常に複雑な理由はわかりませんが、これで十分であることがわかりました。

function camelCaseToDash(input){ 
     // replace Capital letter with the letter + a dash: '-', then lowercase everything.
     return input.replace(/([A-Z])/g, '-$1').toLowerCase(); 
}    

//or, using a callback function, directly lowercasing.
function camelCaseToDashCallback(input){
     //replace capital letter with lowercase variant + a dash '-'.
     return input.replace(/([A-Z])/g, (x)=> "-"+ x.toLowerCase());
}    

通常、オプション1の方が高速です。 https://jsfiddle.net/4557z/17/

1
Joel Harkes