-1

次のコードがあります。rubular.comのようなWebサービスを開発したいのですが、正確な正規表現コマンドがわかりません。

print_rで表示したときに、配列構造のようにphpのように結果が返されるようにしたいと思います。

アプリはhttps://github.com/WILL-I-AM/RegEx/blob/master/RegEx.phpでも入手できます

これは、preg_match_allを返さないため、クラックが発生する場所です。

var regex = new RegExp(document.getElementById('regex').value, document.getElementById('regex_params').value);
    var result = regex.exec(document.getElementById('string').value);

preg_match_allがphpで結果を返すようにするにはどうすればよいですか?

アプリコード:

<html>
<head>
<title>RegEx</title>
<script type="text/javascript">
function timeout_trigger() {
    document.getElementById('result').innerHTML = document.getElementById('regex').value + ' ' + document.getElementById('regex_params').value + ' ' + document.getElementById('string').value;
    var regex = new RegExp(document.getElementById('regex').value, document.getElementById('regex_params').value);
    var result = regex.exec(document.getElementById('string').value);
    document.getElementById('result').innerHTML = result;
}
document.onkeyup = KeyCheck;
function KeyCheck()
{
 if((document.getElementById('regex').value!='')&&(document.getElementById('regex_params').value!='')&&(document.getElementById('string').value!=''))
 {
  setTimeout('timeout_trigger()', 1000);
 }
 else document.getElementById('result').innerHTML = "null";
}
</script>
<style type="text/css">
table
{
background-color:#eeeeee;
}
input
{
height:40px;
padding:5px 5px 5px 5px;
background-color:#000000;
border:1px solid #ffffff;
color:#ffffff;
}
textarea
{
background-color:#000000;
border:1px solid #ffffff;
color:#ffffff;
padding:5px 5px 5px 5px;
}
</style>
</head>
<body bgcolor="#000000">
<table align="center" valign="top" width="1000px" cellpadding="5px" cellspacing="5pc" border="0" bgcolor="#ffffff">
<tr>
<td colspan="4">Your regular expression:</td>
</tr>
<tr>
<td width="5px"><b>/</b></td>
<td><input type="text" name="regex" id="regex" size="135" /></td>
<td width="5px"><b>/</b></td>
<td width="20px"><input type="text" name="regex_params" id="regex_params" size="5" /></td>
</tr>
<tr>
<td colspan="2">Your text string:</td>
<td colspan="2">Match result:</td>
</tr>
<tr>
<td colspan="2" valign="top"><textarea name="string" id="string" rows="10" cols="40"></textarea></td>
<td colspan="2" valign="top"><div id="result"></div></td>
</tr>
</table>
</body>
</html>
4

3 に答える 3

1

以下は rubular とほぼ同じ出力を与えるでしょう、それは常に g オプション (グローバル) を firefox に追加します 他のブラウザについて知りません

function timeout_trigger() {
    document.getElementById('result').innerHTML = 
        document.getElementById('regex').value + ' ' + 
        document.getElementById('regex_params').value + ' ' + 
        document.getElementById('string').value;
    var regex = new RegExp(document.getElementById('regex').value, 
        "g" + document.getElementById('regex_params').value);
    var groups=new Array();
    var matchCounter=1;
    var result=document.getElementById('string').value.replace(regex,
        function(a){
            var foundMatch=false;
            var argcount=1;
            var tmp=new Array();
            while(argcount<arguments.length-2){
                foundMatch=true;
                tmp[tmp.length]=argcount;
                tmp[tmp.length]=":";
                tmp[tmp.length]=arguments[argcount];
                tmp[tmp.length]="<br />";
                argcount++;
            }
            if(foundMatch){
                groups[groups.length]="Match " + matchCounter +":<br />"+
                tmp.join("");
                matchCounter++;
            }
            return "<font style='background-color:#ff0000'>" + a + "</font>";
        });
    document.getElementById('result').innerHTML = result + "<br />" + 
        groups.join("");
}
于 2012-10-18T15:45:47.767 に答える
1

JavaScript で正規表現を照合すると、最初の一致のみが返されますが、すべてのサブパターンが返されます。

フラグを追加するgと、すべての一致が返されますが、一致テキスト全体とサブパターンのみが失われます。

于 2012-10-18T14:19:47.633 に答える
1

PHP の に相当する JavaScript を検索する場合は、次preg_match_all($pattern, $subject, &$matches)を使用します.match

matches = subject.match(pattern);

wherepatternは、グローバルフラグを使用した正規表現です。

于 2012-10-18T14:24:41.843 に答える