web-dev-qa-db-fra.com

obtenir une chaîne entre deux chaînes avec javascript

Comment obtenir une chaîne entre deux chaînes en utilisant une correspondance avec des variables? Le code suivant fonctionne bien si j'utilise une correspondance avec des chaînes Expression régulière pour obtenir une chaîne entre deux chaînes en Javascript J'ai également essayé d'appliquer les informations à JavaScript - Utiliser une variable dans une correspondance de chaîne =:

var test = "My cow always gives milk";

var testRE = test.match("cow(.*)milk");
alert(testRE[1]);

Et si j'ai:

var firstvariable = "cow";
var secondvariable = "milk";

var test = "My cow always gives milk";

J'ai essayé différentes choses, notamment:

var testRE = test.match("firstvariable(.*)secondvariable");
alert(testRE[1]);

et:

var testRE = testRE.match + '("' + firstvariable + "(.*)" + secondvariable +'")';
alert(testRE[1]);

Aucun n'a fonctionné.

18
user3080392

Essaye ça:

test.match(new RegExp(firstvariable + "(.*)" + secondvariable));
26
myTerminal

Utilisez ce code

var regExString = new RegExp("(?:"+firstvariable+")(.*?)(?:"+secondvariable+")", "ig"); //set ig flag for global search and case insensitive

var testRE = regExString.exec("My cow always gives milk.");
if (testRE && testRE.length > 1) //RegEx has found something and has more than one entry.
{  
    alert(testRE[1]); //is the matched group if found
}

Cela correspond uniquement à la partie centrale de la phrase.

  1. (?:"+firstvariable+") trouve mais ne capture pas cow.
  2. (.*?) capture tous les caractères entre cow et milk et les enregistre dans un groupe. ? le rend paresseux donc il s'arrête au lait.
  3. (?:"+secondvariable+") trouve mais ne capture pas milk.

Vous pouvez tester cela ci-dessous:

function testString()
{
    var test = document.getElementById("testStringDiv").textContent;
    var firstvariable = document.querySelectorAll("input")[0].value; //first input;
    var secondvariable = document.querySelectorAll("input")[1].value; //second input;
    var regExString = new RegExp("(?:"+firstvariable+")(.*?)(?:"+secondvariable+")", "ig");
    var testRE = regExString.exec(test);

    if (testRE && testRE.length > 1)
    {  
      document.getElementById("showcase").textContent = testRE[1]; //return second result.
    }
}
document.getElementById("test").addEventListener("click", testString, true);
<div id="testStringDiv">My cow always gives milk.</div>
<div id="showcase">Result will display here...</div>
<input placeholder="enter first var"/><input placeholder="enter second var"/><button id="test">Search in between...</button>
12
Mouser