3

問題

正規表現に問題があります。

文字列のセットがあります。

文字列の例

@param* URL url './' an absolute URL giving the base location of the image
@param* Function callback callback(indexInArray, valueOfElement) The function that will be executed on every object.
@param Function callback Null The function that will be executed when the image is clicked
@param String name 'this is a test name' the name to use when displaying the image
@param String name "this is a test name" the name to use when displaying the image

個々の文字列を取得するために、新しい行でそれらを分割しています。

var match = val.split("\n");

これらの各文字列は、次の5つの値に分類できます。

変数

例:@param Function callback Null The function that will be executed when the image is clicked

@param = required;
Function = type;
callback = name;
Null = default;
The function that will be executed when the image is clicked = description.

私が必要としているのは、さまざまな文字列の可能性をすべて考慮して、この文字列をその部分に分割することです。さまざまなデフォルトと説明の可能性すべてに分割できる正規表現を作成するのに苦労しています。

二重引用符または一重引用符で囲まれた文字列の場合、または関数表記の場合にdefaultValueを取得しようとすると、特に問題が発生します。

コード

これは私の現在の作業コードです。

$.each(match, function(index, value) {
    var part = value.split(/\s/); //TODO need a regx to split this string correctly

    var required     = part[0];
    var type         = part[1];
    var name         = part[2];
    var defaultValue = part[3];
    var description  = part[4];
});

概要

上記の5つの例すべてを同じ5つの変数に分割できる、単一または複数のステップの正規表現が必要です。

編集:正規表現を試していないことをお詫びしますが、どこから始めればよいかわかりません。

4

2 に答える 2

2

これは正規表現を使用していませんが、理解と維持が少し簡単だと思います。また、if ステートメントを実行するためのもう少しエレガントな方法があると確信していますが、それはその瞬間に私が思いついたものです。http://jsfiddle.net/CcAus/

$.each(match, function(index, value) {
    var part = value.split(' ');

    var required     = part.shift();
    var type         = part.shift();
    var name         = part.shift();
    if(part[0][0]=='\''||part[0][0]=='"'){
      part = part.join(' ');
      var defaultValue = part.split(part[0][0]+' ',1)+part[0][0];
      part=part.replace(defaultValue,'')
      var description = part;
    }
    else{
      var defaultValue = part.shift();
      var description = part.join(' ');
    }
});
于 2012-05-20T03:25:26.737 に答える
1

これを試して:

var regExp = /^(@.+?)\s(.+?)\s(.+?)\s(\'.+?\'|\".+?\"|\w.+?\)|\w+?)\s(.*)$/;
results = regExp.exec(value);

var required     = results[0];
var type         = results[1];
var name         = results[2];
var defaultValue = results[3];
var description  = results[4];

http://regexhero.net/tester/を使用して簡単にテストしましたが、それ以外はテストしませんでした。

于 2012-05-20T03:11:05.323 に答える