Private KeeperPrivate Keeper
Объект PK

Строки и разбор

Все 24 строковых метода PK: параметры, результаты, примеры и точные границы поведения.

Все 24 метода принимают обычные значения JavaScript, выполняют ту же операцию, что и соответствующая функция in-Line Kit, и возвращают string. Они не меняют исходную строку: результат нужно сохранить в переменную, парсер или динамическую переменную явно.

Что выбрать

Извлечь значение

getValueByKey, simplePars и regexPars находят данные по ключу, точным границам или регулярному выражению.

Заменить или соединить

replaceStr и regexReplace меняют совпадения, а regexGlue и simpleGlue собирают готовые результаты парсеров.

Изменить строку

Методы регистра, краёв, длины и позиции работают с единицами UTF-16 и правилами регистра Windows.

Обработать список строк

demptystr, dupDel, getLine, getCount, filterLines и sortLines считают переводы строк границами элементов.

Порядок аргументов является частью договора

Передавайте аргументы ровно в порядке из заголовка метода. Особенно легко перепутать replaceStr(from, to, input) и regexReplace(expression, to, input): исходный текст у обеих операций стоит последним.

Извлечение и разбор

PK.getValueByKey(multilineText, keyName)

Ищет первую строку ключ: значение без учёта регистра ключа.

Параметры

multilineText: string — многострочный текст; keyName: string — точный искомый ключ без окружающих пробелов.

Результат

Найденное значение либо строка Key not found: Ключ. Пустое значение считается отсутствующим.

const source = "Status: Active\nPlan: Monitoring";
const plan = PK.getValueByKey(source, "Plan");
// plan === "Monitoring"

Передавайте именно два аргумента. Одно объединённое значение с |KEYNAME|, которое используется во внутренней записи in-Line, не является формой вызова объекта PK. Двоеточия внутри найденного значения теряются; точная причина и безопасные замены показаны в подробном разборе GETVALUEBYKEY.

PK.simplePars(from, to, input, index)

Возвращает текст после выбранного вхождения from и до ближайшего следующего to. Границы чувствительны к регистру.

Параметры

from, to, input: string; index: number — положительный номер вхождения, начиная с 1.

Результат

Найденная строка; при обычной отсутствующей границе — пустая строка.

const html = "<a>first</a><a>second</a>";
const second = PK.simplePars("<a>", "</a>", html, 2);
// second === "second"

Указывайте четвёртый аргумент явно

Текущий исполнитель принимает вызов с тремя аргументами, но подставляет внутренний номер 0, из-за чего результат пуст. Для первого совпадения передавайте 1, для второго — 2. Не полагайтесь на подразумеваемое значение.

Особые границы |FIRSTCHAR| и |LASTCHAR|, выбор вхождения и опасный случай отсутствующей начальной границы описаны в подробном разборе SIMPLEPARS.

PK.regexPars(input, group, expression)

Находит все совпадения регулярного выражения и возвращает выбранную группу каждого совпадения отдельной строкой.

Параметры

input: string; group: number0 для полного совпадения или номер группы; expression: string — выражение.

Результат

Многострочная строка совпадений; если их нет — пустая строка. Неверное выражение или группа вызывает ошибку.

const id = PK.regexPars("item-42", 1, "item-(\\d+)");
// id === "42"

Обратная косая черта в строке JavaScript записывается дважды, поэтому выражение \d+ передано как "\\d+". Выбор полной и захваченной группы разобран в подробном разборе REGEXPARS.

Замена и соединение

PK.replaceStr(from, to, input)

Заменяет все точные вхождения from на to с учётом регистра.

Параметры

from: string — искомая часть; to: string — замена; input: string — исходный текст.

Результат

Новая строка. Исходная переменная не меняется; отдельного режима без учёта регистра этот метод не предоставляет.

const csv = PK.replaceStr(";", ",", "a;b;c");
// csv === "a,b,c"

Точная замена и отличие от шаблона показаны в подробном разборе REPLACESTR.

PK.regexReplace(expression, to, input)

Заменяет каждое полное совпадение регулярного выражения строкой to.

Параметры

expression, to, input: string. Обратные косые черты выражения требуется экранировать для JavaScript.

Результат

Новая строка; отсутствие совпадений возвращает исходный текст. Неверное выражение вызывает ошибку.

const compact = PK.regexReplace("\\s+", " ", "alpha   beta");
// compact === "alpha beta"

Метод объекта PK не принимает номер группы и всегда заменяет полное совпадение. Возможности общей операции и правила групп показаны в подробном разборе REGREPLACE.

PK.regexGlue(input)

Построчно соединяет несколько готовых результатов |REGEX|[n]. Метод не выполняет новое регулярное выражение.

Параметр

input: string — чередование «номер, разделитель, номер», например "1, = ,2".

Результат

Многострочная строка, собранная по позициям первого списка. Запятая не может входить в разделитель.

// REGEX[1]: alice / bob; REGEX[2]: ready / blocked
const rows = PK.regexGlue("1, = ,2");
// alice = ready
// bob = blocked

Поведение списков разной длины и цепочка из нескольких парсеров описаны в подробном разборе REGEXGLUE.

PK.simpleGlue(input)

Добавляет один и тот же текст в конец каждой строки готового результата |REGEX|[n].

Параметр

input: string — номер парсера, первая запятая и окончание, например "2, — готово".

Результат

Многострочная строка с добавленным окончанием. Следующие запятые остаются частью окончания.

// REGEX[2]: [email protected] / [email protected]
const messages = PK.simpleGlue("2, — сообщение отправлено");

Метод только дописывает окончание и не ставит текст перед строкой. Полный пример приведён в подробном разборе SIMPLEGLUE.

PK.escJSON(input)

Превращает произвольный текст во внутреннее содержимое строки JSON: экранирует кавычки, обратные косые черты, переводы строк, табуляцию и управляющие знаки, но не добавляет внешние кавычки.

Параметр

input: string — одно строковое значение, а не готовый объект JSON.

Результат

Экранированное содержимое без внешних кавычек.

const brand = 'Бренд "North Wind"';
const payload = `{"brand":"${PK.escJSON(brand)}"}`;
const decoded = JSON.parse(payload);
// decoded.brand === brand

Почему нельзя передавать готовый объект целиком, показано в подробном разборе ESCJSON.

Регистр, края и позиции

PK.random(alphabet, len, len2)

Создаёт строку, независимо выбирая каждый знак из alphabet.

Параметры

alphabet: string; len, len2: number — целые границы длины.

Результат

Случайная строка. При разных границах нижняя входит в диапазон, верхняя не входит; одинаковые границы задают точную длину.

const fixed = PK.random("ABC123", 5, 5);  // ровно 5 знаков
const ranged = PK.random("ABC123", 5, 10); // от 5 до 9 знаков

Пустой набор и неверные границы не входят в договор; результат не предназначен для паролей и ключей. Подробности приведены в разборе RANDOM.

PK.lower(input)

Переводит буквы во всей строке в нижний регистр по правилам Windows; цифры и знаки не меняются.

Параметр
input: string.
Результат
Новая строка в нижнем регистре.
const name = PK.lower("ProfileName=MainTeam");
// profilename=mainteam

Правила регистра описаны в разборе LOWER.

PK.upper(input)

Переводит буквы во всей строке в верхний регистр по правилам Windows.

Параметр
input: string.
Результат
Новая строка в верхнем регистре.
const locale = PK.upper("Locale=ru-RU");
// LOCALE=RU-RU

Границы операции описаны в разборе UPPER.

PK.fupper(input)

Переводит в верхний регистр только первую единицу строки; остальной текст не меняется.

Параметр
input: string.
Результат
Новая строка; пустой вход остаётся пустым.
const title = PK.fupper("каталог товаров");
// Каталог товаров

Метод не приводит остальные буквы к нижнему регистру. Примеры приведены в разборе FUPPER.

PK.removenum(input)

Удаляет каждый знак от 0 до 9; похожие цифровые знаки других письменностей сохраняются.

Параметр
input: string.
Результат
Строка без десяти обычных цифр.
const route = PK.removenum("Route42Segment9");
// RouteSegment

Точный состав удаляемых знаков указан в разборе REMOVENUM.

PK.fdspace(input)

Последовательно удаляет пробельные знаки с начала обычной непустой строки.

Параметр
input: string.
Результат
Строка без начальных пробельных знаков, кроме описанного ниже крайнего случая.
const value = PK.fdspace("   Currency=EUR");
// Currency=EUR

Строка только из пробелов не обязана стать пустой: выполнение прекращает удаление, когда остаются два знака. Это ограничение разобрано в разборе FDSPACE.

PK.edspace(input)

Удаляет с конца пробелы, табуляцию и переводы строк.

Параметр
input: string.
Результат
Строка без конечных пробельных знаков, но выполнение всегда оставляет хотя бы один знак.
const value = PK.edspace("SessionId=8f3c1b2a   ");
// SessionId=8f3c1b2a

Крайний случай пробельной строки описан в разборе EDSPACE.

PK.length(input)

Возвращает длину строки как количество кодовых единиц UTF-16, причём результат записан строкой.

Параметр
input: string.
Результат
string с десятичным числом; некоторые эмодзи занимают две единицы.
const size = PK.length("😀");
// size === "2"

Различие видимого символа и UTF-16 объяснено в разборе LENGTH.

PK.getChar(input, index)

Возвращает кодовую единицу UTF-16 по положительному номеру, начиная с 1.

Параметры

input: string; index: number — целое число от 1 до Number(PK.length(input)).

Результат

Строка из одной единицы UTF-16; неверный номер возвращает пустую строку.

const separator = PK.getChar("RU-SEO", 3);
// separator === "-"

Метод нельзя безопасно применять к видимым эмодзи по одному номеру. Причина показана в разборе GETCHAR.

Списки строк

PK.demptystr(input)

Удаляет пустые строки и строки, состоящие только из пробельных знаков; пробелы внутри непустой строки сохраняются.

Параметр
input: string — многострочный текст.
Результат
Оставшиеся строки, разделённые переводами строк.
const compact = PK.demptystr("apple\n\n   \npear");
// apple
// pear

Полный многострочный пример приведён в разборе DEMPTYSTR.

PK.dupDel(input)

Сортирует строки по возрастанию и удаляет точные повторы с учётом регистра. Исходный порядок не сохраняется.

Параметр
input: string — многострочный список.
Результат
Отсортированный список без точных повторов.
const unique = PK.dupDel("pear\napple\npear\nbanana");
// apple
// banana
// pear

Если нужно сохранить первое вхождение, этот метод не подходит. Подробности указаны в разборе DUPDEL.

PK.getLine(input, line)

Возвращает строку по положительному номеру, начиная с 1.

Параметры
input: string; line: number — целый номер от 1.
Результат
Выбранная строка; позиция после конца возвращает пустую строку.
const second = PK.getLine("alpha\nbeta\ngamma", 2);
// second === "beta"

Ноль и нечисловые значения не входят в договор, даже если текущее выполнение иногда принимает их за первую строку. Точная граница описана в разборе GETLINE.

PK.getCount(input)

Возвращает количество строк как десятичную строку. Пустая строка между двумя непустыми тоже считается элементом.

Параметр
input: string — многострочный список.
Результат
string с количеством строк.
const count = PK.getCount("Monitors\nKeyboards\nMice");
// count === "3"

Для подсчёта только непустых строк сначала вызовите demptystr. Состав элементов объяснён в разборе GETCOUNT.

PK.filterLines(input)

Удаляет из SOURCE строки, совпавшие со списком STOP. Все пять полей обязательны и располагаются строго в показанном порядке.

Параметр

input: string с полями SOURCE, STOP, MATCH, CASE, EMPTYLINES.

Результат

Отфильтрованные строки. Пропуск, перестановка или неверное значение поля вызывает ошибку.

const filtered = PK.filterLines(`|SOURCE|apple
spam
pear|SOURCE|
|STOP|spam|STOP|
|MATCH|exact|MATCH|
|CASE|insensitive|CASE|
|EMPTYLINES|drop|EMPTYLINES|`);
// apple
// pear

MATCH принимает exact или contains, CASEsensitive или insensitive, EMPTYLINESkeep или drop. Влияние пустой строки из STOP описано в подробном разборе FILTERLINES.

PK.sortLines(input)

Сортирует SOURCE как текст или числа с сохранением взаимного порядка равных строк.

Параметр

input: string с полями SOURCE, MODE, DIRECTION, необязательным по режиму CASE и EMPTYLINES.

Результат

Отсортированные строки. Набор и порядок полей зависят от MODE; неверная форма вызывает ошибку.

const sorted = PK.sortLines(`|SOURCE|10
2
7|SOURCE|
|MODE|numeric|MODE|
|DIRECTION|ascending|DIRECTION|
|EMPTYLINES|drop|EMPTYLINES|`);
// 2
// 7
// 10

Для lexical поле CASE обязательно, для numeric оно запрещено. Допустимая запись числа и положение пустых строк разобраны в подробном разборе SORTLINES.

Серверный сценарий

PK.script(input)

Отправляет запрос GET на сервер, адрес и порт которого заданы в настройках Private Keeper. input добавляется к адресу после /; это сетевой запрос, а не выполнение JavaScript из строки.

Параметр

input: string — путь и параметры без начального /. Специальные знаки адреса заранее кодируются вызывающим кодом.

Результат

Текст ответа без конечных пробельных знаков либо строка, начинающаяся с Synapse System Error - , при ошибке соединения.

const login = PK.urlEncode(PK.login);
const result = PK.script(`validate?login=${login}`);

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