2016-06-20 14 views
1

私は関数を呼び出そうとしています。私は2つのパラメータを渡します。文字列とRegExpを文字列として返します。テストはうまくいくように見えますが、これはif部分に入っているためですが、解析関数が呼び出された後に結果が得られません。何が間違っているか分かりません。任意のヒント?ありがとう! .parse()方法を備えていないRegExpJavascriptの関数にRegExを渡す

var regEx_eNode = "S1"; 
var mystring = 'This is my S1ring!'; 

function getField(eventstr, regfield) { 
    var retval; 
    var regExpression = new RegExp(regfield,'g'); 
    var reg_Exp; 
    if (regExpression.test(eventstr)) { 
    reg_Exp = regExpression.parse(eventstr); 
    alert("reg_Exp[1]"); 
    retval = reg_Exp[1]; 
    alert(retval); 
    } else { 
    retval = "not_available"; 
    } 
    return retval; 
} 
alert('Result: ' + getField(mystring,regEx_eNode)); 
+0

削除 '/ G'、VARのregExpression =新しい正規表現(regfield)'を使用; ':http://stackoverflow.com/questions/1520800/why- regexp-with-global-flag-in-javascript-give-wrong-results –

+0

もしregfieldがユーザーから来たのであれば、悪い考えです。 –

+0

Wiktorに感謝します。値を返さないでください。 – Luzidl

答えて

0

JS。 String#matchまたはRegExp#execのいずれかを使用できます。

また、RegExp#testメソッドで使用されている正規表現に/g修飾子を使用しないでください。予期しない結果が生じる可能性があります。

使用

var regEx_eNode = "S1"; 
 
var mystring = 'This is my S1ring!'; 
 

 
function getField(eventstr, regfield) { 
 
    var retval; 
 
    var regExpression = new RegExp(regfield); // No `/g`! 
 
    var reg_Exp; 
 
    if (regExpression.test(eventstr)) { 
 
    reg_Exp = eventstr.match(regExpression); // <- String#match() 
 
    if (reg_Exp) { 
 
     retval = reg_Exp[0];      // Get the whole match 
 
     alert(retval); 
 
    } else { 
 
     alert("No match!"); 
 
    } 
 
    } else { 
 
    retval = "not_available"; 
 
    } 
 
    return retval; 
 
} 
 
alert('Result: ' + getField(mystring,regEx_eNode));

関連する問題