正则表达式提取2个字符串之间的字符串,包含第3个字符串

时间:2018-01-18 11:44:34

标签: regex

我有这个正则表达式

(?<=TG00).*?(?=#)

提取TG00#之间的所有字符串。演示:https://regex101.com/r/04oqua/1

现在,从上面的结果我想只提取包含TG40 155963的字符串。我该怎么办?

3 个答案:

答案 0 :(得分:1)

您可以将此正则表达式与前瞻和否定字符类一起使用:

$.ajax({
    type: "post",
    url: url,
    data: formData,
    processData: false,
    contentType: false,
    success: function (data) {
        console.log(JSON.stringify(data.revalformbean));
        //console.log(JSON.stringify(data.examformbean.full_name));
        $("input[type='hidden'][name='revalformbean.exam_detail_id']").val(data.revalformbean.exam_detail_id);
        //$("input[type='hidden'][name='examformbean.full_name']").val(data.examformbean.full_name);
        $("input[name='revalformbean.name']").val(data.revalformbean.first_name);
        $("input[name='revalformbean.month_year']").val(data.revalformbean.exam_month_year);
        $("input[name='revalformbean.seat_no']").val(data.revalformbean.seat_no);

        var errorMsg = data.errorMsg;
        //console.log("form "+errorMsg);
        //json2array(data.customResult);
        if (errorMsg != null) {
            //alert(errorMsg);
            $('#errorField').text(data.errorMsg);
            $('#' + formId).find('input[type="submit"]').removeAttr('disabled');
        } else {
            fieldSetHide(formId);
        }
    }
});

RegEx Demo

RegEx说明:

  • (?<=TG00)(?=[^#]*TG40 155963)[^#]+(?=#) :断言我们在之前的位置(?<=TG00)
  • TG00:预测断言我们在0个或更多非#字符后面有字符(?=[^#]*TG40 155963),提前
  • TG40 155963:匹配1个非#字符

答案 1 :(得分:1)

尝试这种模式:

TG00[^#]*TG40 155963[^#]*#

此模式只是在TG40 155963和结尾TG00之间找到字符串#。对于演示中的示例数据,有3场比赛。

Demo

答案 2 :(得分:1)

出于某种原因,将.*?附加到您的lookbehind导致引擎错误的结果,但使用前瞻工作正常。下面的正则表达式与您的文本完全匹配,但它确实通过捕获组提取它。

(?<=TG00).*?(TG40 155963)(?=.*?#)