📄 match.as
字号:
package flare.query
{
/**
* Expression operator for text matching operations. Performs prefix,
* suffix, containment, and regular expression matching.
*/
public class Match extends BinaryExpression
{
/** Indicates a prefix matching test. */
public static const PREFIX:int = 0;
/** Indicates a suffix matching test. */
public static const SUFFIX:int = 1;
/** Indicates a string containment test. */
public static const WITHIN:int = 2;
/** Indicates a regular expression matching test. */
public static const REGEXP:int = 3;
/** Returns a string representation of the string matching operator. */
public override function get operatorString():String
{
switch (_op) {
case PREFIX: return 'STARTS-WITH';
case SUFFIX: return 'ENDS-WITH';
case WITHIN: return 'CONTAINS';
case REGEXP: return 'REGEXP';
default: return '?';
}
}
/**
* Create a new Match expression.
* @param operation the operation to perform
* @param left the left sub-expression
* @param right the right sub-expression
*/
public function Match(op:int, left:*, right:*)
{
super(op, PREFIX, REGEXP, left, right);
}
/**
* @inheritDoc
*/
public override function clone():Expression
{
return new Match(_op, _left.clone(), _right.clone());
}
/**
* @inheritDoc
*/
public override function eval(o:Object=null):*
{
var s:String = String(_left.eval(o));
var p:String = String(_right.eval(o));
// compute return value
switch (_op) {
case PREFIX: return StringUtil.startsWith(s, p);
case SUFFIX: return StringUtil.endsWith(s, p);
case WITHIN: return s.indexOf(p) >= 0;
case REGEXP: return parseRegExp(p).test(s);
}
throw new Error("Unknown operation type: "+_op);
}
private var cachedRegExp:RegExp;
private var cachedPattern:String;
private function parseRegExp(p:String):RegExp
{
if (p == cachedPattern) return cachedRegExp;
cachedPattern = p;
var tok:Array = p.split("/");
cachedRegExp = new RegExp(tok[1], tok[2]);
return cachedRegExp;
}
// -- Static constructors ---------------------------------------------
/**
* Creates a new Match operator for matching string prefix.
* @param left the left-hand input expression
* @param right the right-hand input expression
* @return the new Match operator
*/
public static function StartsWith(left:*, right:*):Match
{
return new Match(PREFIX, left, right);
}
/**
* Creates a new Match operator for matching a string suffix.
* @param left the left-hand input expression
* @param right the right-hand input expression
* @return the new Match operator
*/
public static function EndsWith(left:*, right:*):Match
{
return new Match(SUFFIX, left, right);
}
/**
* Creates a new Match operator for matching string containment.
* @param left the left-hand input expression
* @param right the right-hand input expression
* @return the new Match operator
*/
public static function Contains(left:*, right:*):Match
{
return new Match(WITHIN, left, right);
}
/**
* Creates a new Match operator for matching a regular expression.
* @param left the left-hand input expression
* @param right the right-hand input expression
* @return the new Match operator
*/
public static function RegEx(left:*, right:*):Match
{
return new Match(REGEXP, left, right);
}
} // end of class Match
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -