动态文本regexp之前的字符串,返回重复数组结果

动态文本regexp之前的字符串,返回重复数组结果,regex,actionscript,Regex,Actionscript,我试图在“\ux”之前获取一些字符串,我使用regexp成功地做到了这一点,并使其动态化,但不知怎的,它以数组形式返回,并带有2个重复答案。 我知道我可以像数组[0]一样将其传递,但它看起来并不简单。我做错了什么 function stringBefore($string:String, $before:String):void { var s:String = $string; var start:RegExp = /^([^/;

我试图在“\ux”之前获取一些字符串,我使用regexp成功地做到了这一点,并使其动态化,但不知怎的,它以数组形式返回,并带有2个重复答案。 我知道我可以像数组[0]一样将其传递,但它看起来并不简单。我做错了什么

function stringBefore($string:String, $before:String):void {
        var s:String = $string;         
        var start:RegExp = /^([^/;
        var end:RegExp = /]*)/g;
        var completeRegExp:RegExp = new RegExp(start.source + $before + end.source);

        trace(s.match(completeRegExp))
    }

Exp:SFX\u SOUND之类的消息传递后,我将得到数组中的[SFX,SFX]

您不能以这种方式组合正则表达式。您只能组合字符串模式,然后编译正则表达式对象。因此,您可能希望像这样修复代码:

var start:RegExp = "^([^";
var end:RegExp = "]*)";
var completeRegExp:RegExp = new RegExp(start.source + $before + end.source, "g");
或者,也许只是使用字符串

var start:String = "^([^";
var end:String = "]*)";
var completeRegExp:RegExp = new RegExp(start + $before + end, "g");

嗯,奇怪的是,我测试了新的RegExp(“^([^]*)”),它只给了我一次SFX。使用你的,也给我2个结果。var reg:RegExp=new RegExp(/^([^]*)/g);返回1。但不是动态的。这是有效的。因此,如果使用regexp,结果将始终是数组形式?
.match
返回一个数组()。如果要查找第一个字符串值,可以使用索引
[0]
访问第一个匹配项,而无需添加
“g”
选项(这样我们就不会搜索整个字符串)。