正则表达式's结尾的备选项

Alternative in regular expression's ending

本文关键字:选项 结尾 正则表达式      更新时间:2023-09-26

我有以下DOM结构:

<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);

我对你的代码有点困惑,但是,根据你所说的(并且你已经用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);
}

您不应该使用Regexp解析HTML。不,我是认真的。

话虽如此,多字符替代的正确语法是(?:alternativeA|alternativeB):

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

注意,如果中间有空白字符,这将不起作用。这里还有一个不使用regexp的原因。