пожалуйста, помогите мне,
У меня есть строка, соответствующая SQL-запросу;
let string = `SPMAMA.DOCUMENTO AS DOCUMENTO_MAMA,
NVL(SPMAMA.CARNETSALUS,SPMAMA_N.CARNETSALUS) AS CARNETSALUS_MAMA,
NVL(SPMAMA.NOMBRE1 || ' ' || SPMAMA.NOMBRE2 || ' ' || SPMAMA.APELLIDO1 || ' ' || SPMAMA.APELLIDO2,
SPMAMA_N.NOMBRE1 || ' ' || SPMAMA_N.NOMBRE2 || ' ' || SPMAMA_N.APELLIDO1 || ' ' || SPMAMA_N.APELLIDO2) AS NOMBRE_MAMA`;
и я хочу удалить псевдоним "AS NAME_ALIAS". Что-то вроде этого:
let strWithoutAlias = `SPMAMA.DOCUMENTO,
NVL(SPMAMA.CARNETSALUS,SPMAMA_N.CARNETSALUS),
NVL(SPMAMA.NOMBRE1 || ' ' || SPMAMA.NOMBRE2 || ' ' || SPMAMA.APELLIDO1 || ' ' || SPMAMA.APELLIDO2,
SPMAMA_N.NOMBRE1 || ' ' || SPMAMA_N.NOMBRE2 || ' ' || SPMAMA_N.APELLIDO1 || ' ' || SPMAMA_N.APELLIDO2)`;
Я не знаю, как использовать split и slice для этого, так как я думаю, что это будет комбинация обоих.
Это мой глупый код;
let strngSplit = `SPMAMA.DOCUMENTO AS DOCUMENTO_MAMA,
NVL(SPMAMA.CARNETSALUS,SPMAMA_N.CARNETSALUS) AS CARNETSALUS_MAMA,
NVL(SPMAMA.NOMBRE1 || ' ' || SPMAMA.NOMBRE2 || ' ' || SPMAMA.APELLIDO1 || ' ' || SPMAMA.APELLIDO2,
SPMAMA_N.NOMBRE1 || ' ' || SPMAMA_N.NOMBRE2 || ' ' || SPMAMA_N.APELLIDO1 || ' ' || SPMAMA_N.APELLIDO2) AS NOMBRE_MAMA`.replace(/\r?\n|\r/g, '').split('AS')
Похоже, было бы проще использовать для этого Regex, но, в зависимости от того, что вы на самом деле собираетесь делать, вам может понадобиться что-то более сложное. Сказав это, почему вам нужно сделать замену? Может быть, это проблема X-Y?
@SelakaN да, сэр, спасибо за помощь, «AS DOCUMENTO_MAMA», «AS CARNETSALUS_MAMA» и «AS NOMBRE_MAMA», от «AS...» до следующей запятой (,).
Я предоставил ответ, проверьте, все ли в порядке @AlJw
Разве простого input.replace('AS CARNETSALUS_MAMA', '') недостаточно?
@AlJw Я добавил ответ, основанный на моем предположении, что он правильный. Если вам нужно больше дополнений к этому ответу, вам нужно добавить его в массив замен, которые вы хотите удалить.
что, если псевдонимы динамические, и вам нужно заменить кучу этих запросов, и вы не знаете, что такое псевдонимы? вы все предполагаете, что он хочет заменить этот 1 запрос и жестко запрограммировать его
Кроме того, такие вещи, как внутренние выборки, производные таблицы, строковые константы и т. д., могут сломать наивные решения. Опять же, все зависит от того, как предполагается использовать этот код и насколько «свободной» может быть исходная форма SQL. Опять же, я хотел бы спросить: в каком контексте это будет использоваться?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Насколько я понимаю, для этого вам не нужно регулярное выражение. Вы можете напрямую использовать функцию строки replace() и продолжить удаление указанных блоков строки из исходной строки.
Обратитесь к приведенному ниже коду для справки:
const input = `SPMAMA.DOCUMENTO AS DOCUMENTO_MAMA,
NVL(SPMAMA.CARNETSALUS,SPMAMA_N.CARNETSALUS) AS CARNETSALUS_MAMA,
NVL(SPMAMA.NOMBRE1 || ' ' || SPMAMA.NOMBRE2 || ' ' || SPMAMA.APELLIDO1 || ' ' || SPMAMA.APELLIDO2,
SPMAMA_N.NOMBRE1 || ' ' || SPMAMA_N.NOMBRE2 || ' ' || SPMAMA_N.APELLIDO1 || ' ' || SPMAMA_N.APELLIDO2) AS NOMBRE_MAMA`;
function replaceString(inputString) {
const replacements = [
'AS DOCUMENTO_MAMA',
'AS CARNETSALUS_MAMA',
'AS NOMBRE_MAMA'
];
let output = inputString;
replacements.forEach(replacement => {
output = output.replace(replacement, '');
});
return output;
}
console.info(replaceString(input));Эта работа для меня;
let GROUPBY_CAMPOS = TODOS_CAMPOS.map((e)=> {
e = e.replace(' AS DOCUMENTO_MAMA', '')
e = e.replace(' AS CARNETSALUS_MAMA', '')
e = e.replace(' AS NOMBRE_MAMA', '')
return e.split(' AS ')[0]
})
Вы можете использовать регулярное выражение для удаления всех псевдонимов:
/\s+ - пробелы перед AS
как - КАК
\s+ - пробелы после AS
[^\s,]+ - псевдоним, означает что угодно, кроме пробелов и запятой
/ig - без учета регистра + все вхождения
const input = `SPMAMA.DOCUMENTO AS DOCUMENTO_MAMA,
NVL(SPMAMA.CARNETSALUS,SPMAMA_N.CARNETSALUS) AS CARNETSALUS_MAMA,
NVL(SPMAMA.NOMBRE1 || ' ' || SPMAMA.NOMBRE2 || ' ' || SPMAMA.APELLIDO1 || ' ' || SPMAMA.APELLIDO2,
SPMAMA_N.NOMBRE1 || ' ' || SPMAMA_N.NOMBRE2 || ' ' || SPMAMA_N.APELLIDO1 || ' ' || SPMAMA_N.APELLIDO2) AS NOMBRE_MAMA`;
const replaced = input.replace(/\s+as\s+[^\s,]+/ig, '');
console.info(replaced);Предостережение: это будет работать нормально, пока SQL находится в этом простом формате. Более сложный SQL будет ломаться по разным причинам, таким как внутренние выборки, строковые константы и так далее.
Вы хотите удалить обе части AS CARNETSALUS_MAMA и AS NOMBRE_MAMA?