首页 > 代码高亮,求一个正则表达式

代码高亮,求一个正则表达式

我在编写一个代码高亮的插件,求一个正则表达式,把 javascript 的正则形式(即:/abc/g 的正则形式)识别出来。
例如,把【var rstr = /(['"]).*?\1/gm;】中的【/(['"]).*?\1/gm】识别出来。
多谢啦!


(?<!\/)\/(?:[^\/\\\n\r]|\\.)+\/[a-z]*

用了个零宽度正回顾后发断言 就是前面的(?<!\/), 表示匹配块前面不能有/,避免匹配到注释//abc/的情况

测试 Python

>>> reg = '(?<!\/)\/(?:[^\/\\\n\r]|\\.)+\/[a-z]*'
>>> str = 'var rstr = /([\'"]).*?\\1/gm;  //abc/'
>>> re.findall(reg, str)
['/([\'"]).*?\\1/gm']

如果是用Javascript,忽略吧,Javascript不支持后发断言,要避免匹配到注释,就只能优先匹配是否是注释


\/.+\/[gim]*

js 的代碼高亮我寫過一個純正則表達式版:http://.com/blog/bum/1190000000764811


https://bumfo.github.io/high.html

代碼和 Demo 都在裏面了。包括了對正則表達式等的完整識別。

順便說一句,想要正確匹配 js 中的正則表達式,先得正確匹配其它部分。
正則表達式部分是我做得最久的一項。原因:

var a = b/a/g;

顯然 sf 的編輯器沒有正確高亮 @Integ 。。。

var d = {e:/* I'm comment */ /a/g};

sf 的編輯器再次高亮失敗!

/ a /g; /*/

失敗!這也是正確的 js 代碼,雖然無意義。

a */ a /g; /* aaa */; 

這回,後面的註釋也變成正則了??

var a = /\//g;

哎,這個都錯誤匹配,不應該啊。。。

var a = /\/*a*/g;

同上。。。

顯然,在不進行完整語義識別的情況下,想要正確識別 js 中的正則表達式文法是不可能滴!

【热门文章】
【热门文章】