Выполнить код JavaScript

Здравствуйте.
Есть код на питоне:

    def _parse_sig_js(self, jscode):
        funcname = self._search_regex(
            (r'\b[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\b[a-zA-Z0-9]+\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\bm=(?P<sig>[a-zA-Z0-9$]{2})\(decodeURIComponent\(h\.s\)\)',
             r'\bc&&\(c=(?P<sig>[a-zA-Z0-9$]{2})\(decodeURIComponent\(c\)\)',
             r'(?:\b|[^a-zA-Z0-9$])(?P<sig>[a-zA-Z0-9$]{2})\s*=\s*function\(\s*a\s*\)\s*{\s*a\s*=\s*a\.split\(\s*""\s*\);[a-zA-Z0-9$]{2}\.[a-zA-Z0-9$]{2}\(a,\d+\)',
             r'(?:\b|[^a-zA-Z0-9$])(?P<sig>[a-zA-Z0-9$]{2})\s*=\s*function\(\s*a\s*\)\s*{\s*a\s*=\s*a\.split\(\s*""\s*\)',
             r'(?P<sig>[a-zA-Z0-9$]+)\s*=\s*function\(\s*a\s*\)\s*{\s*a\s*=\s*a\.split\(\s*""\s*\)',
             # Obsolete patterns
             r'(["\'])signature\1\s*,\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\.sig\|\|(?P<sig>[a-zA-Z0-9$]+)\(',
             r'yt\.akamaized\.net/\)\s*\|\|\s*.*?\s*[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*(?:encodeURIComponent\s*\()?\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\b[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\b[a-zA-Z0-9]+\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\bc\s*&&\s*a\.set\([^,]+\s*,\s*\([^)]*\)\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\bc\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*\([^)]*\)\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\bc\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*\([^)]*\)\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\('),
            jscode, 'Initial JS player signature function name', group='sig')

        jsi = JSInterpreter(jscode)
        initial_function = jsi.extract_function(funcname)
        return lambda s: initial_function([s])

надо переписать на C#
Понятно, что нужен, как минимум, бесплатный интерпретатор JS’а. Но какой именно и где его взять?

Я не слышал о существовании платных )

https://www.google.com/search?q=c%23+js+interpreter
:arrow_down:

GitHub - sebastienros/jint: Javascript Interpreter for .NET

Я раньше для Delphi гуглил. Там писали, что нормальные только платные.

Да Дельфи просто нацелен в основном на ентерпрайз и там каждый второй компонент платный ) Бесплатная версия самого Дельфи не так давно появилась.

при попытке сборки, выдаёт какую-то финиту ля комедию:



C:\Users\RAIN\Desktop\jint-2.11.10>build
Building C:\Users\RAIN\Desktop\jint-2.11.10
dotnet-install: .NET SDK version 1.0.0-preview2-003131 is already installed.
Adding C:\Users\RAIN\AppData\Local\Microsoft\dotnet\ to PATH
log  : Restoring packages for C:\Users\RAIN\Desktop\jint-2.11.10\.build\project.json...
error: Unable to load the service index for source https://dotnet.myget.org/f/aspnetcore-master/api/v3/index.json.
error:   An error occurred while sending the request.
error:   Произошла ошибка безопасности
Using makefile: .build\shade\makefile.shade
& : The module '.build' could not be loaded. For more information, run 'Import-Module .build'.
C:\Users\RAIN\Desktop\jint-2.11.10\.build\KoreBuild.ps1:78 знак:2
+ &"$koreBuildFolder\Sake\0.2.2\tools\Sake.exe" -I $koreBuildFolder\sha ...
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (.build\Sake\0.2.2\tools\Sake.exe:String) [], ParentContainsErrorRecordE
   xception
    + FullyQualifiedErrorId : CouldNotAutoLoadModule

чё ему не нравится? :thinking:

https://dotnet.myget.org/f/aspnetcore-master/api/v3/index.json

при переходе по этой ссылке - угроза безопасности :scream: :ghost: :alien:
что за?

Там в ридми вроде бы советуют ставить бету 3.х для поддержки новых фич JS и т.д.

Попробуй в обозревателе перейти по адресу упомянутой ссылки, сам все поймешь.
На первый взгляд проблемы с сертификатом или настройками конфигурации.

И как такое переписать на C#? Оно выдаёт нераспознанная escape-последовательность, потому что есть бэкслеши.
Регулярки и так довольно замороченные, а тут такое наворотили :scream:

@"\b\s............."

не понял :man_shrugging:

C @ не обрабатываются \.

https://dotnetfiddle.net/Z0VUXf

а как это в переменную запихать?

            string expression = @"\b[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\(" +
             "\b[a-zA-Z0-9]+\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\(";

выдаёт ту же ошибку

Так тут нет у второй части.

https://dotnetfiddle.net/tyabj9

а, всмысле на каждую строку @ надо, а так он не понимает :man_shrugging:


теперь ему кавычка с бэкслешем не нравится :thinking: Теперь что делать?

"" внутри строк вместо ".

https://dotnetfiddle.net/d0cHHz

При создании Regex regex = new Regex(expression);, выдаёт экскепшен

System.ArgumentException: "выполняется разбор "\b[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\(\b[a-zA-Z0-9]+\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\(\bm=(?P<sig>[a-zA-Z0-9$]{2})\(decodeURIComponent\(h\.s\)\)\bc &&\(c=(?P<sig>[a-zA-Z0-9$]{2})\(decodeURIComponent\(c\)\)(?:\b|[^a-zA-Z0-9$])(?P<sig>[a-zA-Z0-9$]{2})\s*=\s*function\(\s*a\s*\)\s*{\s*a\s*=\s*a\.split\(\s*"\s*\);[a-zA-Z0-9$]{2}\.[a-zA-Z0-9$]{2}\(a,\d+\)(?:\b|[^a-zA-Z0-9$])(?P<sig>[a-zA-Z0-9$]{2})\s*=\s*function\(\s*a\s*\)\s*{\s*a\s*=\s*a\.split\(\s*"\s*\)(?P<sig>[a-zA-Z0-9$]+)\s*=\s*function\(\s*a\s*\)\s*{\s*a\s*=\s*a\.split\(\s*"\s*\)(["\'])signature\1\s*,\s*(?P<sig>[a-zA-Z0-9$]+)\(\.sig\|\|(?P<sig>[a-zA-Z0-9$]+)\(yt\.akamaized\.net/\)\s*\|\|\s*.*?\s*[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*(?:encodeURIComponent\s*\()?\s*(?P<sig>[a-zA-Z0-9$]+)\(\b[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*(?P<sig>[a-zA-Z0-9$]+)\(\b[a-zA-Z0-9]+\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*(?P<sig>[a-zA-Z0-9$]+)\(\bc\s*&&\s*a\.set\([^,]+\s*,\s..." - Нераспознанная конструкция группирования."

Может там другой диалект регекспа.

Но вообще для начала стоит обратить внимание, что в Питоновском коде это не один большой регексп, а их список.

Что значит список? :thinking: Там же, вроде, одна строка передаётся.
О, точно! Это же список :dizzy_face: Но тогда вообще не понятно, как он ищет :thinking:
Получается, что ищет первое попавшееся совпадение по одному из паттернов?

Да, написано ж в описании функции.