我在编写一个代码高亮的插件,求一个正则表达式,把 javascript 的正则形式(即:/abc/g 的正则形式)识别出来。
例如,把【var rstr = /(['"]).*?\1/gm;】
中的【/(['"]).*?\1/gm】
识别出来。
多谢啦!
我在编写一个代码高亮的插件,求一个正则表达式,把 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不支持后发断言,要避免匹配到注释,就只能优先匹配是否是注释
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
js 的代碼高亮我寫過一個純正則表達式版:http://segmentfault.com/blog/bum/1190000000764811
https://bumfo.github.io/high.html
代碼和 Demo 都在裏面了。包括了對正則表達式等的完整識別。
順便說一句,想要正確匹配 js 中的正則表達式,先得正確匹配其它部分。
正則表達式部分是我做得最久的一項。原因:
顯然 sf 的編輯器沒有正確高亮 @Integ 。。。
sf 的編輯器再次高亮失敗!
失敗!這也是正確的 js 代碼,雖然無意義。
這回,後面的註釋也變成正則了??
哎,這個都錯誤匹配,不應該啊。。。
同上。。。
顯然,在不進行完整語義識別的情況下,想要正確識別 js 中的正則表達式文法是不可能滴!