Начиная с такого текста;
var txt = "hello [a14] world, and [b74] some more [h85], ..."
Ожидаю как результат
var arr =
[ "hello "
, "[a14]"
, " world, and "
, "[b74]"
, " some more "
, "[h85]"
, ", ..."
]
То, что я пробовал до сих пор, но освоить регулярные выражения для меня все еще сложно ...
let txt = "hello [a14] world, and [b74] some more [h85], ..."
let arr = txt.match(/(\[(.*?)\])|(.*?)/g)
console.log( arr )
.as-console-wrapper { max-height: 100% !important; top: 0; }
3 ответа
Вы можете попробовать /(\[[^\]\[]*\]|[^\]\[]+)/g
. Отличия заключаются в следующем:
- использовал
+
вместо*
, чтобы захватить хотя бы один символ и избежать сопоставления пустых строк [^\]\[]
дает вам "любой символ без скобок", чтобы вы могли избежать ненадежного сопоставления с?
- перемещены группы захвата, чтобы быть более интуитивно понятными
const txt = "hello [a14] world, and [b74] some more [h85], ...";
console.log(txt.match(/(\[[^\]\[]*\]|[^\]\[]+)/g));
.as-console-wrapper { max-height: 100% !important; top: 0; }
Вы также можете попробовать разделение на поисковые запросы:
var text = "hello [a14] world, and [b74] some more [h85], ...";
var arr = text.split(/(?=\[)|(?<=\])/);
console.log(arr);
Логика здесь состоит в том, чтобы разбивать строку всякий раз, когда следует [
или то, что предшествует ]
. Обратите внимание, что поисковые пути имеют нулевую ширину, и поэтому шаблон (?=\[)|(?<=\])
совпадает, но фактически не использует текст во входных данных при разделении.
Вы можете использовать .split()
. Хитрость заключается в том, чтобы зафиксировать условие разделения, оно отобразится в результирующем массиве:
let txt = "hello [a14] world, and [b74] some more [h85], ..."
let regex = /(\[[^\]]*\])/;
let result = txt.split(regex);
console.log(result);
Выход:
[
"hello ",
"[a14]",
" world, and ",
"[b74]",
" some more ",
"[h85]",
", ..."
]
Пояснение:
(
- начало группы захвата\[
- сканировать[
[^\]]*
- сканировать все, кроме]
\]
- сканировать]
)
- конец группы захвата
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.