2014-12-26 2 views
7

Как получить строку между двумя строками, используя совпадение с переменными? Следующий код работает хорошо, если я использую матч со строками Regular Expression to get a string between two strings in Javascript я также пытался применить информацию на JavaScript - Use variable in string match:получить строку между двумя строками с javascript

var test = "My cow always gives milk"; 

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

Но что, если я:

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

var test = "My cow always gives milk"; 

Я пробовал различные вещи, в том числе:

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

и:

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

Ничего не работало.

+1

Как он должен обрабатывать случай, как «Моя корова дает молоко мне нравится молоко.». Если матч не будет жадным: «корова дает молоко» или жадна: «корова дает молоко. Мне нравится молоко»? – RobG

+0

Если вы хотите проголосовать, вы можете хотя бы объяснить причину. – user3080392

ответ

13

Попробуйте это:

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

Это сработало. Благодарю. – user3080392

+0

Он возвращает два параметра, а кулак - полная строка –

8

Используйте этот код

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 
} 

Это соответствует только средней части предложения.

  1. (?:"+firstvariable+") находит, но не фиксирует cow.
  2. (.*?) захватывает все символы между cow и milk и сохраняет их в группе. ? делает его ленивым, поэтому он останавливается на молоке.
  3. (?:"+secondvariable+") находит, но не фиксирует milk.

Вы можете проверить это ниже:

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>

Смежные вопросы