0

私はこのような文字列を持っています:

ab
rx'
wq''
pok'''
oyu,
mi,,,,

基本的には、弦を2つに分けたいと思います。最初の部分にはアルファベット文字がそのまま含まれている必要があり、2番目の部分にはアルファベット以外の文字が含まれている必要があります。アルファベット部分は、aとzの間の2〜3文字の小文字であることが保証されています。アルファベット以外の部分は任意の長さにすることができ、1つの文字列の両方ではなく文字,または。のみであることが保証されます(たとえば、発生することはありません)。'eex,',

したがって、結果は次のようになります。

[ab][]
[rx][']
[wq]['']
[pok][''']
[oyu][,]
[mi][,,,,]

これどうやってするの?正規表現を推測しているのですが、特に思いつくのは得意ではありません。

4

6 に答える 6

2

100%保証できる場合:

  1. 文字列は2文字または3文字です
  2. 常に1つ以上の素数/コンマがあります

  3. 文字とマークの前、後、または間に(改行を除いて)空のスペースはありません。

次を使用できます。

/^([a-zA-Z]{2,3})('+|,+)$/gm

var arr = /^([a-zA-Z]{2,3})('+|,+)$/gm.exec("pok'''");
arr === ["pok'''", "pok", "'''"];

var arr = /^([a-zA-Z]{2,3})('+|,+)$/gm.exec("baf,,,");
arr === ["baf,,,", "baf", ",,,"];

もちろん、ある程度の正気を保存し、その正規表現を変数として保存します。

また、警告として、次のように正規表現を処理していない場合:一致が見つからない場合-foo',''マークを混合して一致させようとした場合、または0-1または4+文字、または0マークがある場合。 ....次に、配列を取得する代わりに、を取得しますnull

だからあなたはこれを行うことができます:

var reg = /^([a-zA-Z]{2,3})('+|,+)$/gm,
    string = "foobar'',,''",

    result_array = reg.exec(string) || [string];

この場合、execの結果はnullです。||を置くことによって (または)そこで、元の文字列を含む配列をindex-0として返すことができます。

なんで?

実行が成功した結果には3つのスロットがあるためです。[*string*, *letters*, *marks*]。のような文字を読みたくなるかもしれませんresult_array[1]。しかし、一致が失敗した場合、result_array === nullJavaScriptは試してみるとあなたに叫びますnull[1]

したがって、失敗したexecの最後に配列を返すとresult_array[1] === undefined、JSエラーではなく、取得できます(つまり、パターンに一致するものがなかったため、index-1に文字がありません)。

于 2012-08-10T06:52:49.250 に答える
2

正規表現には、「単語境界」(\b)と呼ばれる優れた特殊表現があります。これを使用して、英数字のシーケンスである単語の境界を検出できます。

だからあなたがしなければならないのは

foo.split(/\b/)

例えば、

"pok'''".split(/\b/) // ["pok", "'''"]
于 2012-08-10T07:23:44.513 に答える
0

あなたはそのようなことを試すことができます:

function splitString(string){
   var match1 = null;
   var match2 = null;
   var stringArray = new Array();
   match1 = string.indexOf(',');
   match2 = string.indexOf('`');
   if(match1 != 0){
      stringArray = [string.slice(0,match1-1),string.slice(match1,string.length-1];
   }
   else if(match2 != 0){
      stringArray = [string.slice(0,match2-1),string.slice(match2,string.length-1];
   }
   else{
      stringArray = [string];
   }

}

于 2012-08-10T06:44:41.083 に答える
0
var str = "mi,,,,";
var idx = str.search(/\W/);
if(idx) {
    var list = [str.slice(0, idx), str.slice(idx)]
}

とにパーツがlist[0]ありlist[1]ます。

PSこれよりも良い方法があるかもしれません。

于 2012-08-10T06:47:08.483 に答える
0

yourStr.match(/(\ w {2,3})([、'] *)/)

于 2012-08-10T06:47:37.547 に答える
0
if (match = string.match(/^([a-z]{2,3})(,+?$|'+?$)/)) {
    match = match.slice(1);
}
于 2012-08-10T07:08:03.290 に答える