2014-12-26 10 views
7

Wie bekomme ich eine Zeichenfolge zwischen zwei Zeichenfolgen mithilfe von Übereinstimmung mit Variablen? Der folgende Code funktioniert gut, wenn ich mit Strings verwenden Match Regular Expression to get a string between two strings in Javascript Ich habe auch versucht die Informationen auf JavaScript - Use variable in string match anzuwenden:erhalten Zeichenfolge zwischen zwei Zeichenfolgen mit JavaScript

var test = "My cow always gives milk"; 

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

Aber was, wenn ich:

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

var test = "My cow always gives milk"; 

Ich habe darunter verschiedene Dinge ausprobiert:

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

und:

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

Keine funktionierte.

+1

Wie sollte es einen Fall behandeln wie „Meine Kuh gibt Milch Ich mag Milch.“. Sollte das Spiel nicht gierig sein: "Kuh gibt Milch" oder gierig: "Kuh gibt Milch. Ich mag Milch"? – RobG

+0

Wenn du abstimmst, kannst du wenigstens einen Grund angeben. – user3080392

Antwort

13

Try this:

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

Das hat funktioniert. Vielen Dank. – user3080392

+0

Es gibt zwei Parameter zurück, und die Faust ist die vollständige Zeichenfolge –

8

Verwenden Sie diesen 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 
} 

Dieses nur den mittleren Teil des Satzes übereinstimmt.

  1. (?:"+firstvariable+") findet, erfasst aber nicht cow.
  2. (.*?) erfasst alle Zeichen zwischen cow und milk und speichert sie in einer Gruppe. ? macht es faul, also bleibt es bei Milch stehen.
  3. (?:"+secondvariable+") findet, erfasst aber nicht milk.

du unten testen:

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>

Verwandte Themen