我想知道是否有更好的方法
我有一个字符串,我想用'='将它的值分成一个数组。
问题在于某些值可能是'> ='和'<='
到目前为止,我已经在拆分和映射它们之前将其更改为其他内容
let s = "x=a&y=b&z=>=5";
let x = s.replace('>=', '**');
console.log(s.replace('>=', '**').split("=").map(x => x.includes('**') ? x.replace('**', '>=') : x))
答案 0 :(得分:2)
您可以通过使用以下正则表达式来使用一个split
来实现此目的:
/(?<=[^>|<])=/
打破这个表达式,我们可以看一下每个组件:
[^>|<])=
-本质上是指匹配任何字符(<
和>
除外)
跟等号
(?<=
-对[^>|<]
进行正面评价。基本上,
如果没有这个,我们将匹配any_character_but _> _ or_ <
跟等号,但是,我们要做的只是匹配
=
前带有any_character_but _> _ or_ <,但不包括
我们比赛中的那个角色。
例如:如果没有此选项,我们的表达式将匹配字符串“ a = b”以得到“ a=
”,但是,我们只想匹配=
而不是“ a”。积极的态度使我们能够做到这一点。
请参见下面的工作示例:
let str = "x=a&y=b&z=>=5";
let res = str.split(/(?<=[^>|<])=/);
console.log(res);
答案 1 :(得分:1)
正则表达式用于否定后置断言-#include <iostream>
#include <utility>
template<typename T>
void checkInitialization(const std::pair<bool, T>& a)
{
if(a.first){
std::cout << "Value is assigned by " << a.second << "." << std::endl;
}
else{
std::cout << "Value is still not assigned." << std::endl;
}
}
int main(void)
{
std::pair<bool, int> x{false, 0};
checkInitialization(x); // Uninitialized
x = {true, 1};
checkInitialization(x); // Initialized
return 0;
}
此处/(?<!.)/
被.
取代,因为我们需要忽略文本(>|<
)前面带有=
或>
的情况。 <
用于考虑所有匹配项,例如/g
将产生x>=y=a<=d
[x>=y, a<=d]