繁体   English   中英

JavaScript Regex返回x之间最后一次出现y,而忽略double x的第二次出现

[英]JavaScript Regex return the last occurrence of y between x while ignoring double x's second occurrence

好的,标题一定是头上的划痕,但这是完整的字符串:

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. 正则表达式查找“​​ y”
  2. “ y”将始终是最后一次出现的“ x”之间的值
  3. 如果最后出现的“ x”前面带有双精度“ x”,则正则表达式假定双精度“ x”的第二部分是“ y”的一部分

因此返回“ y”,其中在某些情况下“ y”可能是“ _target”而在另一个“ y”可能是“ target”

是我在这里:

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

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

更新:

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

您需要使用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); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM