ES6 предоставляет метод Array.from()
, который создает новый экземпляр Array из объекта, подобного массиву или итерации.
let boxes = document.getElementsByClassName('box');
Array.from(boxes).forEach(v => v.style.background = 'green');
console.log(Array.from(boxes));
.box {
width: 50px;
height: 50px;
margin: 5px;
background: blue;
display: inline-block;
}
Как вы можете видеть внутри фрагмента кода, после использования функции Array.from()
вы можете манипулировать каждым элементом.
Это же решение с использованием jQuery
.
$('.box').css({'background':'green'});
.box {
width: 50px;
height: 50px;
margin: 5px;
background: blue;
display: inline-block;
}
Я думаю, проблема в том, что есть? перед отрицанием белых пространств, что означает, что это необязательно
Это должно работать:
[a-zA-Z]{1}([a-zA-Z\s]*[a-zA-Z]{1})?
как минимум одна последовательность букв, затем необязательная строка с пробелами, но всегда заканчивается буквами
Попробуйте это:
^(((?<!^)\s(?!$)|[-a-zA-Z])*)$
Это выражение использует отрицательный lookahead и отрицательный lookbehind , чтобы запретить пробелы в начале или в конце строки и потребовать совпадения всю строку.
[-A-Za-z]
. Это просто синтаксис, который заставляет его выглядеть сложным, но по своей сути это тривиально.
– dasblinkenlight
22 May 2012 в 11:16
^[a-zA-Z]+(\s+[a-zA-Z]+)*$
соответствует именно тому, что требуется, но и делает это настолько эффективно, насколько это возможно. Согласно RegexBuddy, это регулярное выражение соответствует строке "Lorem ipsum tritani impedit civibus ei pri"
всего за двадцать два шага, где yours принимает двести и двадцать два!
– Alan Moore
22 May 2012 в 12:20
Это должно работать, если вы используете его с методом String.matches
. Я предполагаю, что вам нужен английский алфавит.
"[a-zA-Z]+(\\s+[a-zA-Z]+)*"
Обратите внимание, что \s
позволит использовать все типы пробельных символов. В Java это будет эквивалентно
[ \t\n\x0B\f\r]
, который включает в себя горизонтальную вкладку (09), подачу строки (10), возврат каретки (13), подачу формы (12), обратное пространство (08), пробел (32).
Если вы хотите специально разрешить только пробел (32):
"[a-zA-Z]+( +[a-zA-Z]+)*"
Вы можете дополнительно оптимизировать регулярное выражение выше, сделав захват group ( +[a-zA-Z]+)
не захватывает (с String.matches
вы не сможете получить слова отдельно). Также возможно изменить кванторы, чтобы сделать их притяжательными , так как здесь нет точки в обратном следе.
"[a-zA-Z]++(?: ++[a-zA-Z]++)*+"
matches()
Java, но я все равно должен был бы привязать его: ^([a-zA-Z]+\s+)*[a-zA-Z]+$
– Alan Moore
22 May 2012 в 11:10
Я не знаю, могут ли слова в вашей принятой строке разделяться более чем одним пробелом. Если они могут:
^[a-zA-Z]+(( )+[a-zA-z]+)*$
Если не может:
^[a-zA-Z]+( [a-zA-z]+)*$
Строка должна начинаться с буквы (или нескольких букв), а не пробела.
Строка может содержать несколько слов, но каждое слово рядом с первым должно иметь место перед ней.
Надеюсь, я помог.
It cannot contain spaces at the beginning or end of the string.
, поэтому, если такой пример: <space><string><space><string><space>
, результат будет <string><space><string>
. Ваше регулярное выражение может решить этот <string><space><string>
, если пользователь вводит проблему, подобную моему примеру, до того, как ваше регулярное выражение не сможет решить эту проблему.
– Crazenezz
28 May 2012 в 07:51
validating an input field
. Поэтому для таких данных, как <space><string><space><string><space>
, следует возвратить false
, и это то, как работает мое регулярное выражение.
– Pshemo
28 May 2012 в 09:43
<space>Hello World<space>
).
– Crazenezz
28 May 2012 в 09:56
(?!\s*$)
- отрицательный результат; он утверждает, что из текущей позиции (которая является началом строки, благодаря предыдущему^
), невозможно совместить нулевые или более пробельные символы, за которыми следует конец строки. Это неправильно, но не по той причине, которую вы предложили. Regex i> будет работать, но вы должны избавиться от{1}
(который не имеет эффекта) и добавить привязки. Якоря являются необязательными, если вы используете методmatches()
Java, но они помогают сигнализировать о ваших намерениях, и они облегчают перенос регулярного выражения в другие варианты. – Alan Moore 22 May 2012 в 11:01