симуляция щелчка мышью на опцию выбора с помощью jquery

Используйте литерал regex [MDN] :

var reg = /\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)/g;

Вы делаете две ошибки, когда используете RegExp [MDN] :

  • «Разделители» / не должны быть частью выражения
  • . Если вы определяете выражение как строку, вам нужно избежать обратного слэша, потому что это escape-символ в строках

Кроме того, модификаторы передаются как второй аргумент функции.

Итак, если вы хотите использовать RegExp (который вы не используете в этом случае), эквивалент был бы следующим:

var reg = new RegExp("\\(\\s*([0-9.-]+)\\s*,\\s([0-9.-]+)\\s*\\)", "g");

(и теперь я понял, почему регулярные выражения являются более удобными)


Я всегда нахожу его полезно скопировать и пропустить выражение RegExp в консоли и посмотреть его вывод. Принимая ваше исходное выражение, получаем:

/(s*([0-9.-]+)s*,s([0-9.-]+)s*)/g

, что означает, что выражения пытаются сопоставить /, s и g буквально, а parens () по-прежнему рассматриваются как специальные символы .


Обновление: .match() возвращает массив:

["(25.774252, -80.190262)", "(18.466465, -66.118292)", ... ]

, который, кажется, не очень полезен.

Вы должны использовать .exec() [MDN] для извлечения чисел:

["(25.774252, -80.190262)", "25.774252", "-80.190262"]

Это нужно вызывать до тех пор, пока все строки не будут обрабатывается.

Пример:

var reg = /\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)/g;
var result, points = [];

while((result = reg.exec(polygons)) !== null) {
    points.push([+result[1], +result[2]]);
}

Это создает массив массивов, а унарный плюс (+) преобразует строки в числа:

[
    [25.774252, -80.190262], 
    [18.466465, -66.118292], 
    ...
]

Конечно, если вы хотите, чтобы значения как строки, а не как числа, вы можете просто опустить +.

11
задан R3lm 27 April 2012 в 13:18
поделиться