⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 match.as

📁 用于flash/flex的 as3的 2D图形图像图表的动态生成
💻 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 + -