web-dev-qa-db-fra.com

Comment obtenir du texte entre deux caractères?

|text to get| Other text.... migh have "|"'s ...

Comment puis-je obtenir les éléments text to get de la chaîne (et les supprimer)?

Ce ne devrait être que le premier match

18
Ella
var test_str = "|text to get| Other text.... migh have \"|\"'s ...";
var start_pos = test_str.indexOf('|') + 1;
var end_pos = test_str.indexOf('|',start_pos);
var text_to_get = test_str.substring(start_pos,end_pos)
alert(text_to_get);
46
reader_1000

Vous n'avez pas besoin d'une expression régulière pour cela; Tirer le moteur de regex est complètement excessif pour une tâche aussi simple.

Il suffit d'utiliser la manipulation de chaîne de base:

function getSubStr(str, delim) {
    var a = str.indexOf(delim);

    if (a == -1)
       return '';

    var b = str.indexOf(delim, a+1);

    if (b == -1)
       return '';

    return str.substr(a+1, b-a-1);
    //                 ^    ^- length = gap between delimiters
    //                 |- start = just after the first delimiter
}

print(getSubStr('|text to get| Other text.... migh have "|"s ...', '|'));

// Output: text to get

Démo en direct.

Pour l'obtenir:

"|text to get| Other text.... migh have \"|\"'s ...".match(/\|(.*?)\|/)

Pour l'enlever:

"|text to get| Other text.... migh have \"|\"'s ...".replace(/\|(.*?)\|/, "")

Je ne suis pas le expert sur Regex, donc si quelqu'un a des améliorations, merci de le modifier.

5
Alex Turpin

vous devriez rechercher les fonctions suivantes: 

split()
substr()

En fonction de la manière dont vous souhaitez résoudre votre tâche, vous pouvez l’utiliser.

0
rapidfyre

Vous devrez obtenir le texte que vous voulez en utilisant match, puis lancez replace avec:

var text = "|text to get| Other text.... migh have \"|\"'s ...";
text.replace(text.match(/\|([^|]*)\|/)[1], "");
0
Joseph Silber
string = '|text to get| Other text.... migh have "|"\'s ...';
string = string.replace(/^\|[^|]*\|/, '');
0
Arnaud Le Blanc