01/10/2018, 08:41
Cần giúp đỡ regex
Mình có đoạn string sau cần regex bằng c#:
//<![CDATA[
(function(){
var a = function() {try{return !!window.addEventListener} catch(e) {return !1} },
b = function(b, c) {a() ? document.addEventListener("DOMContentLoaded", b, c) : document.attachEvent("onreadystatechange", b)};
b(function(){
var a = document.getElementById('cf-content');a.style.display = 'block';
setTimeout(function(){
var s,t,o,p,b,r,e,a,k,i,n,g,f, WrxdrAA={"jKh":+((!+[]+!![]+[])+(+[]))};
t = document.createElement('div');
t.innerHTML="<a href='/'>x</a>";
t = t.firstChild.href;r = t.match(/https?:///)[0];
t = t.substr(r.length); t = t.substr(0,t.length-1);
a = document.getElementById('jschl-answer');
f = document.getElementById('challenge-form');
;WrxdrAA.jKh-=+((!+[]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]));WrxdrAA.jKh*=+((+!![]+[])+(!+[]+!![]+!![]+!![]));WrxdrAA.jKh+=+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]));WrxdrAA.jKh+=+((+!![]+[])+(!+[]+!![]+!![]+!![]+!![]));WrxdrAA.jKh-=+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]));WrxdrAA.jKh+=!+[]+!![]+!![]+!![]+!![]+!![];WrxdrAA.jKh+=+((+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]));a.value = parseInt(WrxdrAA.jKh, 10) + t.length; '; 121'
f.submit();
}, 4000);
}, false);
})();
//]]>
Chuỗi cần lấy sau khi regex:
var s,t,o,p,b,r,e,a,k,i,n,g,f, WrxdrAA={"jKh":+((!+[]+!![]+[])+(+[]))};
t='demo',a='demo'
WrxdrAA.jKh-=+((!+[]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]));WrxdrAA.jKh*=+((+!![]+[])+(!+[]+!![]+!![]+!![]));WrxdrAA.jKh+=+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]));WrxdrAA.jKh+=+((+!![]+[])+(!+[]+!![]+!![]+!![]+!![]));WrxdrAA.jKh-=+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]));WrxdrAA.jKh+=!+[]+!![]+!![]+!![]+!![]+!![];WrxdrAA.jKh+=+((+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]));a.value = parseInt(WrxdrAA.jKh, 10) + t.length;
Bài liên quan
Đừng có lấy regex mà đi parse code, chẳng đi về đâu được đâu, lại còn khó bảo trì nữa, đây là javascript, vậy bạn nên tìm thư viện xử lý javascript trên C#, giới thiệu cho bạn 2 thư viện rất tốt:
Chính xác là 2 lib này đổi từ Javascript sang cấu trúc AST (https://vi.wikipedia.org/wiki/Cây_cú_pháp_trừu_tượng)
Code để parse bên Jint:
Code để parse bên Nil.JS (phân tích cấu trúc dữ liệu của nó khá là dài, nên mình bày bạn cách gọi lệnh parse thôi):
Cảm ơn bạn đã giải thích.
Tớ regex đoạn đó để cho vào Jint mà.
Sau khi regex được đoạn:
var s,t,o,p,b,r,e,a,k,i,n,g,f, WrxdrAA={“jKh”:+((!+[]+!![]+[])+(+[]))};
t=‘demo’,a=‘demo’
WrxdrAA.jKh-=+((!+[]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]));WrxdrAA.jKh*=+((+!![]+[])+(!+[]+!![]+!![]+!![]));WrxdrAA.jKh+=+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]));WrxdrAA.jKh+=+((+!![]+[])+(!+[]+!![]+!![]+!![]+!![]));WrxdrAA.jKh-=+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]));WrxdrAA.jKh+=!+[]+!![]+!![]+!![]+!![]+!![];WrxdrAA.jKh+=+((+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]));a.value = parseInt(WrxdrAA.jKh, 10) + t.length;
Thì cho vào jint nó sẽ ra kết quả luôn.
Jint không chạy được các lệnh: t = document.createElement(‘div’);
t.innerHTML=“x”; … nên tớ mới muốn regex xoá hết đoạn này đi mà?
Bạn có skype không cho tớ hỏi chút
Do not use Tools.RemoveComments (NiL.JS) directly. This method stops processing after char ‘/’ and returns only part of code. If you want to get AST see Module.Root. It is root of AST.
Thanks, I have edited my post