2016-08-08 7 views
0

私は現在、location.path URLを取得していて、私のタイトルとしてURLを表示しています。「バナナとリンゴ」のようなタイトルを持っていればどうすればcamelcaseにすることができますか? "そして"代わりに "バナナとアップル"を返すjavascript regex camelcase

私はこのジャバスクリプトコードとその返された私のタイトルを "バナナとアップル"とみなしました。

function camelize(str) { 
     return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function(match, index) { 
      if (+match === 0) return " "; // or if (/\s+/.test(match)) for white spaces 
      return index == 0 ? match.toLowerCase() : match.toUpperCase(); 
     }); 
    } 

と私は交換しています(/)と( - )のスペースとして

this.title = camelize(lastPartOfUrl.replace(/\/|\-/g, ' ')); 

または

var cleanUrl = lastPartOfUrl.replace(/\/-/g, ' '); 
this.title = camelize(cleanUrl.replace(/-/g, ' ')); 
+0

「banana/and/apple-or-orange」は「Banana and Apple or Orange」になるはずですか? – Arnauld

+0

「と」は大文字ではないことをどのように知ることになっていますか?ちなみに、これは "camelcase"ではなく、可変/識別子命名方式を指します。私はそれが "単語の大文字大文字"と呼ばれるだろうと思う。 –

答えて

0

String.prototype.capitalizeFirstLetter = function() { 
 
    return this.charAt(0).toUpperCase() + this.slice(1); 
 
}; 
 

 
String.prototype.toCamelCase = function() { 
 
    return this.split(" ").reduce((previousValue, currentValue, currentIndex) => (currentIndex == 1) ? 
 
    previousValue.toLowerCase() + currentValue.capitalizeFirstLetter() : 
 
    previousValue + currentValue.capitalizeFirstLetter() 
 
); 
 
}; 
 
alert("Banana And Apples".toCamelCase())

EDI T:小文字になるための単語の配列を除いて、単語を大文字に:あなたはニック・ブルさんに頼らない限り

​​

+0

...私はあなたの質問を理解していません。だから、2番目の言葉はすべて大文字にしませんか?または結婚式は大文字にしないでください? –

+0

彼は 'And 'を' and'で置き換えたいと思っています。 –

+0

@RolandStarke更新された機能は、かっこいいです。 –

0

を任意のコンピュータ言語でこれを行うのコヒーレントな方法はまだありませんソリューション、または同様のものです。

問題は、コンピュータプログラムが 'バナナ'が 'and'とは異なるタイプの単語であることを認識しないということです。つまり、 'banana'は名詞、 'and'は接続詞です。

あなたの文字列にあるもの(Nick Bullの解決策のようなもの)の知識を使用するか、最初の文字を大文字にして結果を取るより簡単な解決策を受け入れる必要があります。

(私は私が選ぶだろうかを知る)

+0

あなたはどちらを選択しますか? – nCore

+0

部分的に私は怠け者です。あなたが誰かを選んだ例外的な言葉のリストが、別のものを使うことになっているので、最初の文字を大文字にするだけです。 「バナナとリンゴ」は、人間の読者を瞬時に混乱させることはありませんが、プログラムには困難が生じています。だから私は人間の直感的な柔軟性に頼り、可能な組み合わせを無限に混乱させます。 –

1

単一正規表現に基づいて短いソリューションがあります。

function camelCase(txt){ 
    var lower='and,or,a,in,on,'; //stop-words 
    return txt //.split(/\/-/).join(' ') 
      .toLowerCase().replace(/(\b.)(\S*\b)(\s|$)/g, 
         function(m/*full match*/, 
           n/*(\b.)*/, 
           p/*(\S*\b)*/, 
           q/*(\s|$)*/){ 
         //console.log(n,p); 
         return (lower.indexOf(n+p+',')===-1? 
          n.toUpperCase() : n) + p + q;}); 
} 
+0

これは大丈夫と短く動作するようですが、私は返信txtのコメントを取得していません。 "/"を取り除き、 " - "をfuncのスペースとして置き換える方法はありますか?私は別にそれを行う必要はありませんか? – nCore

+0

'/。split(/ \/- /).'(' ') 'のコメントを外します。それで全部です。 –