如果与特定值不匹配,则按一定值拆分-javascript

时间:2018-12-01 05:07:54

标签: javascript

我想知道是否有更好的方法

我有一个字符串,我想用'='将它的值分成一个数组。

问题在于某些值可能是'> ='和'<='

到目前为止,我已经在拆分和映射它们之前将其更改为其他内容

let s = "x=a&y=b&z=>=5";
let x = s.replace('>=', '**');

console.log(s.replace('>=', '**').split("=").map(x => x.includes('**') ? x.replace('**', '>=') : x))

2 个答案:

答案 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)

regexp-lookbehind

正则表达式用于否定后置断言-#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]