2017-02-22 6 views
1

大学のコースコードを接頭辞と接尾辞に分割する必要があります。例えばCSE1011をプレフィックスCSEおよびサフィックス1011に追加します。接頭辞は2つ以上のアルファベットで、接尾辞は1つでも3つでもかまいません。これまでのところ私はこの正規表現が出ている:正規表現を使って大学のコースコードを接頭辞と接尾辞に分割する必要があります

/([A-Z]{2,})(?:\s*)([0-9]{3,})?$/g 

var courscrCode = 'CSE1011'; 
 
var courseRegex = /([A-Z]{2,})(?:\s*)([0-9]{3,})?$/g; 
 
var splitted = courseRegex.exec(courscrCode); 
 
console.log(splitted);

もこれを試してみました。私はちょうど2部分文字列の接頭辞と接尾辞を取得しようと思ってソリューションを必要とするより多くの試合に

var courscrCode = 'CSE1011'; 
 
var courseRegex = /([A-Z]{2,})(?:\s*)([0-9]{3,})?$/g; 
 

 
if (courscrCode.match(courseRegex)) { 
 
    var splitted = courscrCode.split(courseRegex); 
 
    console.log(splitted.length); 
 
    if (splitted.length > 1) { 
 
    splitted.forEach(function(value, index) { 
 
     if ((value != '') && (value != undefined)) 
 
     console.log(value, index); 
 
    }); 
 
    } 
 
} else { 
 
    console.log('course code mangled'); 
 
}

を取得しています。他のソリューションにも公開しています。

+0

ではありません。あなたのコード内で一致するものを読むときには、常に最初のものをスキップしてください。 – Igor

+0

希望する出力の例を追加できますか?私の知る限り、最初のコードブロックは、あなたが記述している方法で動作しています。 – amflare

+2

マッチの最初の要素( 'splitted [0]')は常に一致する文字列全体を返します。 'splitted [1]'と 'splitted [2]'を探してください。 [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec)に基づいて:*返された配列には最初の項目として一致したテキストがあり、 * – Terry

答えて

1

SECONDサンプルコードであなたのsplitted配列は次のとおりです。

["", "CSE", "1011", ""] 
  • ご入力テキストcourscrCodeは、常に1つのコースのコードである場合、あなたはに接頭辞を見つける必要があります[1]と[2]の番号

  • 入力テキストが確認のためのコースコードだけではない場合は、いくつかの変更が必要です。

注:配列の最初の空の項目は、アレイ内のCSEと最後の項目の前に、すべての文字が1011後のすべての文字です。 これは、最初の正規表現パターンは、私にはよさそうだ、最初の一致が完全一致で、次の2がグループ化された一致している全体の一致値

 var courscrCode = 'CSE1011'; 
 
    var courseRegex = /([A-Z]{2,})(?:\s*)([0-9]{3,})?$/g; 
 
    var prefix = '' ; 
 
    var suffix = '' ;  
 
    if (courscrCode.match(courseRegex)) { 
 
     var splitted = courscrCode.split(courseRegex); 
 
     console.log(splitted.length); 
 
     if (splitted.length > 1) { 
 
     prefix = splitted[1]; 
 
     suffix = splitted[2]; 
 
     //or: 
 
     splitted.splice(0,1); 
 
     splitted.splice(2,1); 
 
     console.log(splitted); 
 
     } 
 
    } else { 
 
     console.log('course code mangled'); 
 
    }

+0

*上記のドキュメント**およびこのページのすべてのコードスニペット**の価値はすべて*です。これはOPが見ているものです。あなたが空の要素を得る唯一の方法は、空の捕捉グループ '()'、エンジンによって選択された空の交互の '(a |)'、空の値 '(a)(\ s *)を返すことができる評価、 (b) 'と' 'ab ''は' ["ab"、 "a"、 ""、 "b"] 'を返します。 '(a)(\ s |)(b)'は同じものを返します。 '(a)(\ s()|)(b)'のように決して到達しなかったネストされたキャプチャも。それは複雑です。 –

+0

トピック: "**大学のコースコードを接頭辞と接尾辞に正規表現で分割する必要があります"、2番目のコードで 'split'関数を使用し、' split'関数について書いています! @cfqueryparam – MohaMad

+0

これも動作しています。 2つの答えを受け入れることができず、最初のものを受け入れることができませんでした。私の個人的な選択 –

2

上記のように、MDNは、正規表現によって返される配列がの場合、常にに一致するテキストを最初の項目として含めると述べています。以下のコードは最初の要素を削除します。

var courscrCode = 'CSE1011'; 
 
var courseRegex = /([A-Z]{2,})(?:\s*)([0-9]{3,})?$/g; 
 
var splitted = courseRegex.exec(courscrCode); 
 
splitted.splice(0,1); 
 
console.log(splitted);

+0

これは動作しています。正しいMDNドキュメントを指してくれてありがとう。この回答を受け入れる –

+0

"この回答を受け入れる" @RezwanKhan – MohaMad

関連する問題