2015-06-02 2 views
-1

У меня есть следующий DOM структура:Alternative в регулярном выражении окончания

<form> 
<input type="text" id="a"> 
<button>Submit</button> 
</form> 

или:

<form> 
<input type="text" id="a"> 
</form> 

которого один зависит от того, что пользователя делает это созданное динамически.

Я хочу, чтобы иметь возможность добавить еще один вход прямо под предыдущим (он еще не может существовать и быть первым). Чтобы сделать это, я хочу получить весь текст до тех пор, пока я не добавлю новый вход. Как я могу получить этот текст с помощью регулярного выражения?

Я попробовал следующее:

'(.*?)[<button.*?>Submit<\/button><\/form>|<\/form>]' 

Но это не работает, потому что он отображает пустую строку в качестве результата.

var afterRegex = new RegExp('(.*?)[<button.*?>Submit<\/button><\/form>|<\/form>]', 'i'); 
var appendAfter = $(".downloadCode textarea").val().match(afterRegex)[1]; 
alert(appendAfter); 
+0

Вы также должны показать код, который использовался для проверки вашего регулярного выражения. – Anonymous

+0

Несомненно, отредактировал вопрос. – khernik

ответ

0

Вы should not parse HTML using Regexp. Нет, серьезно.

Это, как говорится, правильный синтаксис для альтернатив нескольких символов является (?:alternativeA|alternativeB):

(.*?)(?:<button.*?>Submit<\/button><\/form>|<\/form>) 

Обратите внимание, что это не работает, если у вас есть пробелы между ними. Еще одна причина не использовать Regexps здесь.

1

Я немного смущен вашим кодом, но, основываясь на том, что вы сказали (и что вы отметили свой вопрос с помощью jQuery), я думаю, что вы можете выполнить то, что вы пытаетесь сделать с этим код:

var $newInput = **CREATE_YOUR_NEW_INPUT_ELEMENT_HERE**; 
var $form = $("form"); 
var $lastInput = $form.find("input:last"); 

// no inputs, make the new input the first element in the form 
if ($lastInput.length < 1) { 
    $form.prepend($newInput); 
} 
// at least on existing input, add the new input after the last one 
else { 
    $lastInput.after($newInput); 
} 
Смежные вопросы