-1

我有以下代码,我想开发一个像 rubular.com 这样的网络服务,但我不知道确切的正则表达式命令;

当使用 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);

我如何在 php 中返回 preg_match_all 的结果?

应用代码:

<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

在 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 回答
1

以下将给出与 rubular 相同的输出,它总是在 firefox 中添加 g 选项(全局)不知道其他浏览器

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 回答