zoukankan      html  css  js  c++  java
  • 解析javascript变量

    //add by tim
    //提供解析javascript 脚本的变量集合

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication6
    {
    class VariableScript
    {
    public static void TestJavaScript()
    {

    System.Diagnostics.Debug.WriteLine("在所有变量后加[i]");
    VariableScript _VariableScript = new VariableScript();
    _VariableScript.JavaScript = "aaa1/(a+b)+abc1+1000*(a+ccc)hh%222(999+999)";

    System.Diagnostics.Debug.WriteLine(_VariableScript.JavaScript);

    List<PartElement> list = _VariableScript.Variables;

    list.ForEach(m =>
    {

    if (m.IsVariable)
    {
    m.ElementString = m.ElementString + "[i]";
    }
    })
    ;

    string strData = _VariableScript.ToString();

    System.Diagnostics.Debug.Write(strData);
    }
    char[] _ScriptChar;

    /// <summary>
    /// 脚本分解出来的char集合
    /// </summary>
    public char[] ScriptChar
    {
    get {
    if (_ScriptChar == null)
    {
    _ScriptChar = _JavaScript.ToCharArray();
    }
    return _ScriptChar;
    }

    }


    string _JavaScript;
    /// <summary>
    /// 用户输入的脚本javascript
    /// </summary>
    public string JavaScript
    {
    get {
    return _JavaScript;
    }
    set {
    _JavaScript = value;
    }
    }


    List<PartElement> _Variables;
    /// <summary>
    /// 解析后的变量集合
    /// </summary>
    public List<PartElement> Variables
    {
    get {
    if (_Variables == null)
    {
    _Variables = new List<PartElement>();
    StringBuilder _StringBuilder = new StringBuilder();
    for(int i=0;i<ScriptChar.Length;i++)
    {
    CharProperty _CharProperty = new CharProperty(this.JavaScript,i);
    if (_CharProperty.IsVariablePart)
    {
    _StringBuilder.Append(_CharProperty.MyChar);

    if (ScriptChar.Length == i + 1)
    {
    PartElement _PartElement = new PartElement();
    _PartElement.IsVariable = true;
    _PartElement.ElementString = _StringBuilder.ToString();
    _Variables.Add(_PartElement);
    }
    }
    else
    {
    if (_StringBuilder.Length > 0)
    {
    PartElement _PartElement = new PartElement();
    _PartElement.IsVariable = true;
    _PartElement.ElementString = _StringBuilder.ToString();
    _Variables.Add(_PartElement);
    }


    PartElement _PartElement1 = new PartElement();
    _PartElement1.IsVariable = false;
    _PartElement1.ElementString = _CharProperty.MyChar.ToString();
    _Variables.Add(_PartElement1);
    _StringBuilder.Clear();
    }
    }
    }
    return _Variables;

    }
    }
    /// <summary>
    /// Variables集合的转换成字符串
    /// </summary>
    /// <returns></returns>
    public override string ToString()
    {
    StringBuilder _Builder = new StringBuilder();
    Variables.ForEach(m=>_Builder.Append(m));

    return _Builder.ToString();

    }

    /// <summary>
    /// 构造函数
    /// </summary>
    public VariableScript()
    {

    }
    }

    /// <summary>
    /// 解析时对应的每一个字符属性
    /// </summary>
    class CharProperty
    {
    public string JavaScript;
    public int CharIndex;
    public char MyChar
    {
    get {
    return JavaScript[CharIndex];
    }
    }
    string optionString = @"+-*/%() ";


    public bool IsVariableEnd//变量的结尾
    {
    get
    {
    bool result = false;
    if (IsVariablePart)
    {
    if(CharIndex+1<JavaScript.Length)
    {
    char tempChar=JavaScript[CharIndex+1];
    if (optionString.Contains(tempChar))//是特殊的字符,不是变量的一部分
    {
    result=true;
    }
    }

    if (CharIndex + 1 == JavaScript.Length)
    {
    result = true;
    }
    }
    return result;
    }
    }

    public bool IsVariablePart
    {
    get {
    bool result = false;

    if(Char.IsLetter(MyChar))
    result = true;

    if (Char.IsDigit(MyChar))
    {
    for (int i = CharIndex-1; i >=0; i--)
    {
    char tempChar = JavaScript[i];
    if (Char.IsLetter(tempChar))//是字母,认为是变量的一部分
    {
    result = true;
    break;
    }

    if (optionString.Contains(tempChar))//是特殊的字符,不是变量的一部分
    {
    result = false;
    break;
    }
    }
    }

    return result;
    }
    }

    public CharProperty(string pScript, int pCharIndex)
    {
    this.JavaScript = pScript;
    this.CharIndex = pCharIndex;
    }
    }

    /// <summary>
    /// 解析出来的每一个集合
    /// </summary>
    class PartElement
    {
    public string ElementString;
    public bool IsVariable=false;


    public override string ToString()
    {
    return ElementString;
    }
    }
    }

  • 相关阅读:
    mysql中drop、delete、truncate的区别简述
    hadoop之数据倾斜
    Mysql相关:navicat for mysql 加注释
    泛型
    工银亚洲见证开户详细过程和攻略
    classpath:和classpath*:的区别
    单索引与唯一索引
    MySQL中SQL语句之反引号,单引号
    《集体智慧编程》学习笔记 第三章
    《集体智慧编程》 读书笔记 第二章
  • 原文地址:https://www.cnblogs.com/mingyongcheng/p/3439177.html
Copyright © 2011-2022 走看看