search

Home  >  Q&A  >  body text

javascript - 获取代码关键字的正则表达式

javascript中应用。
我要用正则表达式获取一段代码字符串中的“var”关键字,但必须保证“var”不是被包含在字符串或者注释中的。例如:
var a = 10; (这句话中要获取 var)
/* var a = 20 */ (这句话中不会获取var,因为这是注释内容,var不被看作关键字)
b = 'var a'; (这句话也不会获取var,因为var被看作字符串,不是关键字)

该如何写正则表达式呢?

阿神阿神2900 days ago383

reply all(2)I'll reply

  • PHPz

    PHPz2017-04-10 14:44:48

    "var a = 10; /* var a = 20 */ b = 'var a';".replace(/\/\*.+\*\//g, '').replace(/(['"]).+\1/g, '').match(/var.+?;/g)
    

    我还是更新下答案吧,我这里只是针对题主给的代码给出一个思路(思路就是可以先过滤不需要的然后再获取而不用做到一步获取到),再不在问题上说明一下我觉得我快要被你们这些正则洁癖症患者的反例给抨击死了。

    reply
    0
  • 阿神

    阿神2017-04-10 14:44:48

    解析時修改並不總是最好的選項,減小對上下文的依賴有助於代碼的健壯性與可重用性。

    更重要的是,有時候不解析就無法刪去,但是又要求先刪去再解析就類似雞生蛋蛋生雞的悖論了。

    舉個簡單的例子:var a = "/*"; var b = "a"; var c = "*/"; /* " */ var d = "\"";

    var r = /\/\*.*?\*\/|"(?:[^\"\\]|\\.)+"|'(?:[^\'\\]|\\.)+'|\/(?:[^\/\\]|\\.)+\/|(var)/g;
    
    var s = 'var a = "/*"; var b = "a"; var c = "*/"; /* " */ var d = "\\\"";', m;
    
    while(m = r.exec(s)){
        m[1] && console.log(m);
    }
    

    附:

    一個簡單而完整的代碼高亮 demo:http://segmentfault.com/blog/bum/1190000000764811

    reply
    0
  • Cancelreply