Вы можете использовать следующее регулярное выражение для извлечения интересующих данных:
(?<=\s(?=\(\sarray\['nosql'\]))([\s\w\['\]\s<@(.]*\)\))
(?<=\s(?=\(\sarray\['nosql'\]))
. Lookbehind, чтобы найти пробелы, за которыми следует открывающая скобка, и array['nosql']
. ([\s\w\['\]\s<@(.]*\)\))
Класс символов для сопоставления пробелов \s
, буквенно-цифровых значений \w
, квадратных скобок [
и ]
, символов <
, @
и )
. Наконец, сопоставьте заключительные два закрывающих скобки ))
. Вы можете проверить его вживую здесь .
Питон:
>>import re
>>str = """2118|"((value5 IN('X5','X1','Y1.6','Z2.3','NO23') AND value1 NOT LIKE('%RISP%')) OR ( value5 is null AND ( array['nosql']
<@ type_list AND (array['S4'] <@ value_list OR array['Z6'] <@ value_list OR array['C2.6']
<@ value_list OR array['C2.5'] <@ value_list OR array['NO24'] <@ value_list)) AND ( array['no_key']
<@ value_list AND NOT array['RISP'] <@ value_list))) AND SL IN
('FS025','FS028','FS071','FPG01','FPG02','FPG03','FPG04','FPG05','FPG06','FPG07','FPG09','FPG10','FPG12','FPG13','FPG16','FPG17','FPG18',
'FPG19','FPG26','FPG28','FPG29','FPG30','FPG31','FPG34','FPG35','FPG40','FPG32','FPG45','FPG55','FPG56','FPG57','FPG58','FPG66','FPG97',
'FPG32','FPG33','FPG36','FPG37','FPG42','FPG59','FPG60')"|""|"CT"|"{FPG44,FPG09,FPG18,FPG59,FPG32,FPG11,FPG56,FPG03,FPG10,FPG58,FPG37,
FPG04,FPG17,FPG60,FPG66,FS025,FPG28,FPG12,FPG16,FPG07,FPG31,FPG34,FPG40,FPG06,FPG55,FPG36,FPG19,FPG30,FS028,FPG26,FPG97,FPG42,FPG01,
FPG29,FPG02,FS071,FPG33,FPG05,FPG45,FPG35,FPG13}"|""|"XSQC Target"|""|""|"1"|"Active"|""|"Speed ACP_ASiR"|"""""
>>data = re.findall(r"(?<=\s(?=\(\sarray\['nosql'\]))([\s\w\['\]\s<@(.]*\)\))",str)
>>print(data)
["( array['nosql'] \n<@ type_list AND (array['S4'] <@ value_list OR array['Z6'] <@ value_list OR array['C2.6'] \n<@ value_list OR array['C2.5'] <@ value_list OR array['NO24'] <@ value_list))"]
Вы можете добавить параметр запроса в ваш экспресс API. т.е.
app.get('/test', (req, res) => {
...
let search = req.query.search;
fetch("https://api-v3.igdb.com/games", {
...
body: 'fields name; search "' + search + '"; where version_parent = null;'
})
...
});
А затем во втором сценарии JS;
test.addEventListener('click',() => {
let search = document.getElementById("search-term").value;
fetch("http://localhost:3000/test?search=" + search, ...})
...
});
При условии, что у вас есть вход в HTML-файл;