Вы хотите динамически строить регулярное выражение, и для этого правильным решением является использование конструктора new RegExp(string)
. Чтобы конструктор обрабатывал специальные символы буквально , вы должны избегать их. Существует встроенная функция в виджета автозаполнения jQuery UI , называемая $.ui.autocomplete.escapeRegex
:
[...] вы можете использовать встроенный
$.ui.autocomplete.escapeRegex
. Он возьмет один строковый аргумент и уберет все символы регулярных выражений, что сделает результат безопасным для перехода кnew RegExp()
.Если вы используете jQuery UI, вы можете использовать эту функцию или скопировать его определение из источника :
function escapeRegex(value) { return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ); }
И использовать его следующим образом:
"[z-a][z-a][z-a]".replace(new RegExp(escapeRegex("[z-a]"), "g"), "[a-z]"); // escapeRegex("[z-a]") -> "\[z\-a\]" // new RegExp(escapeRegex("[z-a]"), "g") -> /\[z\-a\]/g // end result -> "[a-z][a-z][a-z]"
Это действительно плохой пример того, как работает поиск subelements
. (И имеет старый, неподдерживаемый, синтаксис).
Посмотрите на это:
---
- hosts: localhost
gather_facts: no
vars:
families:
- surname: Smith
children:
- name: Mike
age: 4
- name: Kate
age: 7
- surname: Sanders
children:
- name: Pete
age: 12
- name: Sara
age: 17
tasks:
- name: List children
debug:
msg: "Family={{ item.0.surname }} Child={{ item.1.name }} Age={{ item.1.age }}"
with_subelements:
- "{{ families }}"
- children
Задача Список детей похожа на вложенный цикл поверх families
(внешний цикл) и над children
подэлементом в каждом семействе (внутренний цикл). Поэтому вы должны предоставить список dicts в качестве первого аргумента для subelements
и имени подэлемента, который вы хотите итерировать внутри каждого внешнего элемента.
Таким образом item.0
(семья в моем примере) является внешним элементом и item.1
(дочерний элемент в моем примере) является внутренним элементом.
В примере Ansible docs subelements
используется для циклического перемещения по пользователям (внешний) и добавления нескольких открытых ключей (внутренних).
map
илиjson_query
могут быть полезны. – Konstantin Suvorov 28 January 2017 в 14:09