Эмуляция SQL КАК в JavaScript

Я использую следующий макрос для выручения меня с NSRect:

#define LogRect(RECT) NSLog(@"%s: (%0.0f, %0.0f) %0.0f x %0.0f",
    #RECT, RECT.origin.x, RECT.origin.y, RECT.size.width, RECT.size.height)

Вы могли сделать что-то подобное для CGPoint:

@define LogCGPoint(POINT) NSLog(@"%s: (%0.0f, %0.0f)",
    #POINT POINT.x, POINT.y);

Используя его следующим образом:

LogCGPoint(cgPoint);

произвел бы следующее:

cgPoint: (100, 200)
9
задан Syscall 8 March 2018 в 23:46
поделиться

3 ответа

То, что у вас есть, будет работать, пока вы сначала экранируете символы регулярного выражения в своем шаблоне. Ниже приведен один пример из блога Саймона Уиллисона :

RegExp.escape = function(text) {
  if (!arguments.callee.sRE) {
    var specials = [
      '/', '.', '*', '+', '?', '|',
      '(', ')', '[', ']', '{', '}', '\\'
    ];
    arguments.callee.sRE = new RegExp(
      '(\\' + specials.join('|\\') + ')', 'g'
    );
  }
  return text.replace(arguments.callee.sRE, '\\$1');
}

Затем вы можете реализовать свой код как:

likeExpr = RegExp.escape(likeExpr);
var match = new RegEx(likeExpr.replace("%", ".*").replace("_", ".")).exec(str) != null;
10
ответ дан 4 December 2019 в 11:43
поделиться

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

Но лучшим вариантом может быть усечение целевых строк, чтобы длина соответствовала вашей строке поиска, и проверка на равенство.

1
ответ дан 4 December 2019 в 11:43
поделиться

Вот функция, которую я использую, на основе PHP-функции preg_quote :

function regex_quote(str) {
  return str.replace(new RegExp("([\\.\\\\\\+\\*\\?\\[\\^\\]\\$\\(\\)\\{\\}\\=\\!\\<\\>\\|\\:\\-])", "g"), "\\$1");
}

Итак, ваша строка теперь будет:

var match = new RegEx(regex_quote(likeExpr).replace("%", ".*").replace("_", ".")).exec(str) != null;
2
ответ дан 4 December 2019 в 11:43
поделиться
Другие вопросы по тегам:

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