JavaScript正则表达式返回x之间最后一次出现的y,同时忽略double x的第二次出现

时间:2018-03-14 12:36:05

标签: javascript regex

好的,所以标题必须是头颅,但这里是完整的字符串:

y = "_target"
x = "_"

string A = "prefix_param_name_id_set_selected_param_name_index__target_"
string B = "prefix_param_name_id_set_selected_param_name_index_target_"
  1. regex寻找“y”
  2. “y”将始终是最后一次出现的“x”
  3. 之间的值
  4. 如果最后一次出现的“x”前面有双“x”,那么正则表达式假设双“x”的第二部分是“y”的一部分
  5. 返回“y”,其中一个实例“y”可能是“_target”而另一个“y”可能是“target”

    This就在我身边:

    var str = "prefix_param_name_id_set_selected_param_name_index__target_";
    alert(str.match(/\(([^)]*)\)[^(]*$/)[1]);
    

    返回“目标”;它应该是“_target”。

    更新

    请注意,“y”是一个变量且未知。 str是已知的,但正则表达式不知道“y”是什么,只是在最后一次出现的“x”之间找到它

1 个答案:

答案 0 :(得分:0)

您需要使用xy来创建正则表达式

var y = "_target";
var x = "_";
var regexp = new RegExp("(?<=" + x + ")(" + y + ")(?=" + x + ")", "g");
var input = "prefix_param_name_id_set_selected_param_name_index__target_";
var matches = input.match(regexp);

matches输出

  

[ “_目标”]

<强>解释

  • 使用(?<=" + x + ")检查y是否跟随x
  • (" + y + ")捕获y
  • (?=_)会检查x是否也跟y

<强>演示

var y = "_target";
var x = "_";
var regexp = new RegExp("(?<=" + x + ")(" + y + ")(?=" + x + ")", "g");
var input = "prefix_param_name_id_set_selected_param_name_index__target_";
var matches = input.match(regexp);
console.log(matches);