Как извлечь строку с помощью JavaScript Regex?

Причины использования хранимых процедур:

  • Уменьшают сетевой трафик - необходимо отправить SQL-оператор по сети. С sprocs можно выполнить SQL в пакетах, который также более эффективен.
  • Кэширующийся план запросов - в первый раз, когда sproc выполняется, SQL Server создает план выполнения, который кэшируется для повторного использования. Это особенно производительно для маленьких запросов, выполняемых часто.
  • Способность использовать выходные параметры - при отправке встроенного SQL, который возвращает одну строку, можно только возвратить recordset. С sprocs можно вернуть их как выходные параметры, который значительно быстрее.
  • Полномочия - при отправке встроенного SQL необходимо дать разрешения на таблице (таблицах) пользователю, который предоставляет намного больше доступа, чем просто предоставление разрешения выполнить разделение sproc
  • логики - удаляет генерирующий SQL код и выделяет его в базе данных.
  • Способность отредактировать, не перекомпилировав - это может быть спорно. Можно отредактировать SQL в sproc, не имея необходимость перекомпилировать приложение.
  • Находят, где таблица используется - с sprocs, если Вы хотите найти все SQL-операторы, ссылающиеся на конкретную таблицу, можно экспортировать код sproc и искать его. Это намного легче, чем попытка найти его в коде.
  • Оптимизация - для DBA легче оптимизировать SQL и настроить базу данных, когда sprocs используются. Легче найти недостающие индексы и такой.
  • атаки с использованием кода на SQL - который правильно записанный встроенный SQL может защитить от нападений, но sprocs лучше для этой защиты.
123
задан piperchester 6 April 2019 в 07:13
поделиться

5 ответов

Вам необходимо использовать флаг m :

multiline; обрабатывать начальные и конечные символы (^ и $) как рабочие на нескольких строках (т. е. сопоставить начало или конец каждой строки (разделенные \ n или \ r), а не только самое начало или конец вся входная строка)

Также поместите * в нужное место:

"DATE:20091201T220000\r\nSUMMARY:Dad's birthday".match(/^SUMMARY\:(.*)$/gm);
//------------------------------------------------------------------^    ^
//-----------------------------------------------------------------------|
85
ответ дан 24 November 2019 в 01:17
поделиться
function extractSummary(iCalContent) {
  var rx = /\nSUMMARY:(.*)\n/g;
  var arr = rx.exec(iCalContent);
  return arr[1]; 
}

Вам потребуются следующие изменения:

  • Поместите * в скобки, как предложено выше. В противном случае ваше соответствие группа будет содержать только один характер.

  • Избавьтесь от ^ и $ . С глобальным параметром они совпадают по началу и концу полной строки, а не по началу и концу строк. Вместо этого сопоставьте явные символы новой строки.

  • Я полагаю, вам нужна соответствующая группа (какая внутри скобок), а не полный массив? arr [0] - это полное совпадение ( "\ nSUMMARY: ..." ) и следующие индексы содержат группу совпадений.

  • String.match (regexp) должен вернуть массив с совпадения. В моем браузере этого не происходит (Safari на Mac возвращает только полный совпадение, а не группы), но Regexp.exec (строка) работает.

92
ответ дан 24 November 2019 в 01:17
поделиться

Скорее всего, ваше регулярное выражение должно быть

/\nSUMMARY:(.*)$/g

Небольшой полезный трюк, который мне нравится использовать, - назначать по умолчанию при сопоставлении с массивом.

var arr = iCalContent.match(/\nSUMMARY:(.*)$/g) || [""]; //could also use null for empty value
return arr[0];

Таким образом, вы не раздражаетесь ошибки типа при использовании arr

18
ответ дан 24 November 2019 в 01:17
поделиться

(. *) вместо (.) * будет началом. Последний захватит только последний символ в строке.

Кроме того, нет необходимости экранировать : .

6
ответ дан 24 November 2019 в 01:17
поделиться

вот как вы можете анализировать файлы iCal с помощью javascript

    function calParse(str) {

        function parse() {
            var obj = {};
            while(str.length) {
                var p = str.shift().split(":");
                var k = p.shift(), p = p.join();
                switch(k) {
                    case "BEGIN":
                        obj[p] = parse();
                        break;
                    case "END":
                        return obj;
                    default:
                        obj[k] = p;
                }
            }
            return obj;
        }
        str = str.replace(/\n /g, " ").split("\n");
        return parse().VCALENDAR;
    }

    example = 
    'BEGIN:VCALENDAR\n'+
    'VERSION:2.0\n'+
    'PRODID:-//hacksw/handcal//NONSGML v1.0//EN\n'+
    'BEGIN:VEVENT\n'+
    'DTSTART:19970714T170000Z\n'+
    'DTEND:19970715T035959Z\n'+
    'SUMMARY:Bastille Day Party\n'+
    'END:VEVENT\n'+
    'END:VCALENDAR\n'


    cal = calParse(example);
    alert(cal.VEVENT.SUMMARY);
-1
ответ дан 24 November 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: