Удалить псевдоним для строкового текста

пожалуйста, помогите мне,

У меня есть строка, соответствующая 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')

Вы хотите удалить обе части AS CARNETSALUS_MAMA и AS NOMBRE_MAMA?

SelakaN 18.07.2023 14:56

Похоже, было бы проще использовать для этого Regex, но, в зависимости от того, что вы на самом деле собираетесь делать, вам может понадобиться что-то более сложное. Сказав это, почему вам нужно сделать замену? Может быть, это проблема X-Y?

Haroldo_OK 18.07.2023 14:56

@SelakaN да, сэр, спасибо за помощь, «AS DOCUMENTO_MAMA», «AS CARNETSALUS_MAMA» и «AS NOMBRE_MAMA», от «AS...» до следующей запятой (,).

AlJw 18.07.2023 14:59

Я предоставил ответ, проверьте, все ли в порядке @AlJw

SelakaN 18.07.2023 15:03

Разве простого input.replace('AS CARNETSALUS_MAMA', '') недостаточно?

Reyno 18.07.2023 15:04

@AlJw Я добавил ответ, основанный на моем предположении, что он правильный. Если вам нужно больше дополнений к этому ответу, вам нужно добавить его в массив замен, которые вы хотите удалить.

SelakaN 18.07.2023 15:16

что, если псевдонимы динамические, и вам нужно заменить кучу этих запросов, и вы не знаете, что такое псевдонимы? вы все предполагаете, что он хочет заменить этот 1 запрос и жестко запрограммировать его

Chris G 18.07.2023 15:22

Кроме того, такие вещи, как внутренние выборки, производные таблицы, строковые константы и т. д., могут сломать наивные решения. Опять же, все зависит от того, как предполагается использовать этот код и насколько «свободной» может быть исходная форма SQL. Опять же, я хотел бы спросить: в каком контексте это будет использоваться?

Haroldo_OK 18.07.2023 19:20
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
8
54
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Насколько я понимаю, для этого вам не нужно регулярное выражение. Вы можете напрямую использовать функцию строки 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 будет ломаться по разным причинам, таким как внутренние выборки, строковые константы и так далее.

Haroldo_OK 18.07.2023 19:18

Другие вопросы по теме