正则表达式为特殊情况提取子字符串
regex to extract substring for special cases
我有一个场景,我想根据以下条件提取一些子字符串。
- 搜索任何模式 myvalue=123& ,提取 myvalue=123
- 如果“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 匹配除空白字符或 &
myvalue=[^&\s]*