В javascript, как лучше всего разобрать INT из строки, начинающейся с буквы (например, «test [123]»)? Мне нужно что-то, что будет работать для примера ниже.
Мой JS:
$(document).ready(function() {
$(':input').change( function() {
id = parseInt($(this).attr("id")); //fails for the data below
alert(id);
});
}
Мой сгенерированный HTML:
<select id = "attribute[123]">
<!-- various options -->
</select>
<select id = "attribute[456]">
<!-- various options -->
</select>
Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


parseInt(input.replace(/[^0-9-]/,""),10)
Конечно, для поплавков это не сработает. Опера конкретно спросила о ints.
Возможно, просто отфильтруйте строку с помощью .replace (). Если есть другой способ, то я об этом не знаю:
parseInt("attribute[123]".replace("attribute[", "").replace("]", "")));
Вы, вероятно, могли бы использовать какое-нибудь Regex, чтобы поместить это только в один .replace (), но я плохо разбираюсь в Regex, поэтому я просто сделал это дважды.
Проверьте это в своем браузере с помощью
javascript:alert(parseInt("attribute[123]".replace("attribute[", "").replace("]", "")));
Должен предупредить 123.
Вы можете использовать регулярное выражение для сопоставления числа:
$(this).attr("id").match(/\d+/)
Отметьте галочкой для лаконичности и удобочитаемости. Тем не менее, спасибо всем. :)
Обратите внимание, что регулярное выражение следует изменить на «/ [- +]? \ D + /» для более общего случая (чтобы разрешить подписанные целые числа), но это выглядит ненужным для ситуации OP.
Что сделало бы его более надежным, так это выполнение $ (this) .attr ("id"). Match (/ \ [(\ d +) \] /) [1], поскольку это позволило бы такие вещи, как "attribute7 [123]"
объяснение здесь было бы очень полезным.
Интересно, что это НЕ будет работать, если заданы допустимые литералы с плавающей запятой, такие как "1e10".