Cómo encontrar una cadena en javascript delimitada por corchetes como [TEXTO]

Tengo entendido que se puede separar con .split (" "), pero me gustaría encontrar textos dentro de un cierto carácter específico, tal como [...]

Ejemplo:

<div>[text1][text2]</div>
<!-- Otra forma -->

<div id="Seach-Text">Lorem Ipsum is [simply] dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard</div>

Para el primer caso, busco simplemente dos cadenas de palabras, tal como se ve en el codigo <div>[text1][text2]</div>, que divida en dos variables T1, T2 e imprima dichas variables text1 y text2.

var T1 = "text1";
var T2 = " text2";

// <!-- Otra forma -->

var T3 = "simply";
2
задан 13.10.2016, 11:02
3 ответа

Код

var regex = /\[([^\]]+)]/g,
    match,
    resultado = [],
    texto = "[text1][text2]Lorem Ipsum is [simply] dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard";

//bucle para todas las coincidencias
while ((match = regex.exec(texto)) !== null) {
    resultado.push(match[1]);
}

//se obtienen todos los resultados en un array
console.log("Se encontró:", resultado);

//..o se puede obtener resultado[0], resultado[1], etc.
var T1 = resultado[0];
var T2 = resultado[1];

//mostrar el resultado
document.getElementById("resultado")
        .innerText = "Primera palabra: " + T1
                   + "\nSegunda palabra: " + T2;
<p>Resultado:</p>
<pre id="resultado"></pre>

Demo в regex101.com


Описание

Мы используем регулярное выражение

/\[([^\]]+)]/g

Что совпадает с:

  • \[ - Буквальный характер "["
  • ([^\]]+) - Это группа, которая запишет текст, который совпадает с:
    • [^\]]+ - Любой характер, кроме "]" , все разы смогите совпадать.
  • ] - Буквальный характер "]"
  • Модификатор /g - чтобы находить все совпадения (не только первая).


И мы это применяем в цикле, пока regex.exec(texto)▶️ имейте результаты.

Использовав группу, текст, который совпал с этой первой группой, получается внутри цикла как match[1].

2
ответ дан 24.11.2019, 13:07
  • 1
    Спасибо @mariano - то, что я искал точно, что слова, подуманные между ( ) paracentesis дали оказанные переменными отличные. –  DaNiThO 14.10.2016, 00:05

Твое планирование представляет следующая проблема:

  • , Если результаты ограничивают Двумя (2) из-за цепи, podrГ-эксперта хранить их в переменных.

  • , Если результаты - mГєltiples, взамен, планирование, не функционирует, потому что вместо переменных ты recomendarГ - в использование объекта Гі договоренность.

В любом случае, я думаю, что это - то, что ты ищешь:

str = "Lorem Ipsum is [simply] dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard";

var T1 = str.match(/\[(.*)\]/).pop();

alert(T1);
4
ответ дан 24.11.2019, 13:07
  • 1
    Большое спасибо @JuanFernandoz, –  DaNiThO 13.10.2016, 09:25
  • 2
    Вот то, что он искал, я захотел выдвинуть две формы, первая - < div> [text1] [text2] < / div> –  DaNiThO 13.10.2016, 09:27
  • 3
    и это просто две цепи слов в этом случае, как видят в коде < div> [text1] [text2] < / div> что делил на две переменные T1, T2 и печатал вышеупомянутые переменные text1 и text2. –  DaNiThO 13.10.2016, 09:30
  • 4
    Это не удаваться и # 237; в для antes[text1]algo en el medio[text2]después, так как совпадать, и # 237; в с [text1]algo en el medio[text2]. –  Mariano 13.10.2016, 11:31

Завись от того, чего ты хочешь достичь, если это только поиски, он рекомендовал бы тебе использовать метод матч String.

Функционируй следующего способа: ты вводишь регулярное выражение и то, что расположено между скобкой ( ) он будет задержанным. Он возвратит тебе набор (array) с задержанными элементами.

//Tu Texto
let text = `some [sample] text [here] hehe. <div> htm[l]? </div>`;
//String match
text.match(/\[([\w\s]*)\]/g)
  .forEach((item) => {
    //console.log( item );
    //Puedes limpiar el texto con:
    console.log( item.replace(/[\[\]]/g, '') );
  });

Важная часть здесь состоит в том, что в регулярное выражение мы помещаем одну g в конце концов для того, чтобы он искал во всей цепи.

Объяснение

Регулярное выражение /\[([\w\s]*)\]/g ищи любую вещь, которая была бы символом \w или место \s нуль или больше раз [\w\s]* (Он замечает: [] означай, что будет находиться одна из вещей внутри скобки), и потом мы это завертываем в \[ \] что главным образом означают, что я искал буквально [ или ] потому что мы используем обратный брусок \ чтобы показывать, что он не означает, что я упомянул ранее на escojer об одном или другом, если не, что это искал буквально. В конце концов, мы помечаем с одной g конец выражения для того, чтобы он искал то, что мы хотим.

Окончательно, что будет подавать тебя, является набором слов, который является тем, что ты ищешь:

let conjunto = text.match(/\[([\w\s]*)\]/g);

Если тебе интересно, как отлаживание array характеров [ и ] с одним map он стоил бы, но он вытекает из вопроса.

Больше информации на String.prototype.match() MDN: String Матч

Больше информации на RegExp MDN: Регулярное выражение

4
ответ дан 24.11.2019, 13:07
  • 1
    В сентябре, у тебя есть raz и # 243; n! Я думаю, что твоя м и # 225; s определи, спасибо за aportaci и # 243; n! ^^ –  SigmaSoldier 13.10.2016, 12:22
  • 2
    Большое спасибо @SigmaSoldier, explicaci и # 243; n - это очень хорошее, Спасибо за помогание мне. –  DaNiThO 14.10.2016, 00:03