正则表达式为特殊情况提取子字符串

regex to extract substring for special cases

我有一个场景,我想根据以下条件提取一些子字符串。

  1. 搜索任何模式 myvalue=123& ,提取 myvalue=123
  2. 如果“myvalue”出现在没有“&”的行尾,提取 myvalue=123

例如:

The string is abcdmyvalue=123&xyz => the it should return  myvalue=123
The string is abcdmyvalue=123 => the it should return  myvalue=123

对于第一种情况,它适用于以下正则表达式 - myvalue=(.?(?=[&,""])) 我正在寻找如何修改此正则表达式以包括我的第二个场景。我正在使用 https://regex101.com/ 来测试这个。
感谢 Advace!

function regex(data) {
var test = data.match(/=(.*)&/);
if (test === null) {
return data.split('=')[1]
} else {
return test[1]
}
}

console.log(regex('abcdmyvalue=123&3e')); //123
console.log(regex('abcdmyvalue=123')); //123

这是您的工作代码,如果字符串末尾没有 &,它将为 null,否则将阻塞在那里,我们可以简单地拆分字符串并获取值,如果 & 出现在字符串末尾,则正则表达式将简单地提取 = 和 &

之间的值

如果您想使用现有的正则表达式,那么您可以这样做

var test = data1.match(/=(.*)&|=(.*)/)

const result = test[1] ? test[1] : test[2];
console.log(result);

关于您尝试过的模式的一些注释

  • 如果只想匹配,可以省略捕获组
  • e* 匹配 0+ 次 e char
  • 部分 .*?(?=[&,""]) 匹配最少的字符,直到它可以断言右边的 & ," 中的一个,因此正向先行期望单个字符出席的权利

您可以将模式缩短为仅匹配,使用否定字符 class 匹配除空白字符或 &

之外的任何字符 0+ 次
myvalue=[^&\s]*

Regex demo