首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AS3中使用变量Regexp

问在AS3中使用变量Regexp
EN

Stack Overflow用户
提问于 2011-07-12 05:58:29
回答 2查看 7.9K关注 0票数 6

使用ActionScript3.0(在Flash CS5中)

匹配任何数字的标准正则表达式为:

代码语言:javascript
复制
var myRegexPattern:Regex = /\d/g;

为了匹配字符串变量,正则表达式应该是什么样子的?(这个例子是一个“理想”而不是“工作”的代码片段),例如:

代码语言:javascript
复制
var myString:String = "MatchThisText"
var myRegexPatter_WithString:Regex = /\d[myString]/g;

我见过一些变通方法,其中包括创建多个regex实例,然后按源代码将它们与有问题的变量组合,这似乎是错误的。或者使用flash字符串对creator进行正则表达式,但它只是草率地使用了所需的所有双转义序列和三转义序列。

肯定有一些我在直播文档或谷歌上找不到的无痛方法。AS3甚至拥有这种功能吗?如果不是,它真的应该。

或者我错过了一种简单得多的方法来简单地避免这个任务,由于我是regex的新手,我只是太天真了?

EN

回答 2

Stack Overflow用户

发布于 2011-07-12 06:22:54

我实际上已经在博客上提到过这一点,所以我只想告诉你:http://tyleregeto.com/using-vars-in-regular-expressions-as3它谈到了可能的解决方案,但没有像你提到的那样理想的解决方案。

编辑

以下是该博客文章的重要部分的副本:

下面是一个从文本块中剥离标签的正则表达式。

代码语言:javascript
复制
/<("[^"]*"|'[^']*'|[^'">])*>/ig

这个漂亮的表达方式就像是一种魅力。但我想要更新它,以便开发人员可以将它剥离的标记限制为数组中指定的标记。非常简单,要在正则表达式中使用变量值,首先需要将其构建为字符串,然后进行转换。类似于以下内容:

代码语言:javascript
复制
var exp:String = 'start-exp' + someVar + 'more-exp';
var regex:Regexp = new RegExp(exp);

非常直截了当。所以,在进行这个小升级时,我就是这么做的。当然,一个很大的问题是非常明显的。

代码语言:javascript
复制
var exp:String = '/<' + tag + '("[^"]*"|'[^']*'|[^'">])*>/';

猜猜发生了什么,无效的字符串!最好对字符串中的引号进行转义。哦,这会破坏正则表达式!我被难住了。所以我打开了语言参考,看看我能找到什么。"source“参数(我以前从未用过)引起了我的注意。它返回一个描述为“正则表达式的模式部分”的字符串。它完美地做到了这一点。以下是解决方案:

代码语言:javascript
复制
var start:Regexp = /])*>/ig;
var complete:RegExp = new RegExp(start.source + tag + end.source);

为了方便起见,您可以将其简化为:

代码语言:javascript
复制
var complete:RegExp = new RegExp(/])*>/.source + tag, 'ig');
票数 9
EN

Stack Overflow用户

发布于 2011-07-12 09:32:42

正如泰勒正确指出的(他的答案很好用),您可以将正则表达式组装为字符串端,然后使用new RegExp("pattern", "flags")语法将该字符串传递给RegExp构造函数。

代码语言:javascript
复制
function assembleRegex(myString) {
    var re = new RegExp('\\d' + myString, "i");
    return re;
}

请注意,当使用字符串存储正则表达式模式时,您确实需要添加一些额外的反斜杠以使其正常工作(例如,要在正则表达式中获取\d,您需要在字符串中指定\\d )。另请注意,字符串模式不使用正斜杠分隔符。换句话说,以下两个语句是等价的:

代码语言:javascript
复制
var re1 = /\d/ig;
var re2 = new Regexp("\\d", "ig");

附加注意:您可能需要处理myString变量以转义它可能包含的任何反斜杠(如果它们被解释为文字)。如果是这种情况,该函数将变为:

代码语言:javascript
复制
function assembleRegex(myString) {
    myString = myString.replace(/\\/, '\\\\');
    var re = new RegExp('\\d' + myString);
    return re;
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6657179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档