很抱歉,如果此问题的上下文感觉曾被问过。 我是新来的,也是RegEx的新手。
我一直试图解决问题,并使用http://regexr.com(精彩网站!)部分解决了问题。
有3种颜色的礼物:红色(R),藏红花(S),白色(W)。你想只选择藏红花礼物。 据信,白色礼物旁边的藏红花礼物是不好的'以及与“不好”相关的藏红花礼物。 (S)礼物也不好['你想给你的朋友好礼物。 红色礼品接近“不好”。礼物仍然很好" **
基本上,S in ... RSR ......很好,但不应该是WSW或SWS组的旁边。 SSSS ...... S很好。
WSSSRSSWSSW
SSSSSS
SRSRSSSSSSR
SRWSSWRSRWSSWSRSS
/S(?!S*W)/g
我使用了它,除了WSSS(第一行文本)中的S和最后一行之外它有效。
我该如何解决? 谢谢你的时间(:
答案 0 :(得分:2)
function getValidS(str){
str = str.replace(/(S*W+S*)/g, '').replace(/R/g, '');
console.log(str);
}
getValidS("WSSSRSSWSSW");
getValidS("SSSSSS");
getValidS("SRSRSSSSSSR");
getValidS("SRWSSWRSRWSSWSRSS");
getValidS()返回所有有效的S
答案 1 :(得分:1)
这是我对它的看法,取代所有不是好礼物而不是直接选择好礼物的东西。函数结构取自marvel308,正则表达式我自己。
function getValidS(str){
str = str.replace(/((W+S+)|(S+W+)|R|W)/g, '');
console.log(str);
}
getValidS("WSSSRSSWSSW");
getValidS("SSSSSS");
getValidS("SRSRSSSSSSR");
getValidS("SRWSSWRSRWSSWSRSS");
答案 2 :(得分:1)
在阅读下面的评论后,请改用此模式并检查捕获组#1
S*W+S*|(S+)
S # "S"
* # (zero or more)(greedy)
W # "W"
+ # (one or more)(greedy)
S # "S"
* # (zero or more)(greedy)
| # OR
( # Capturing Group (1)
S # "S"
+ # (one or more)(greedy)
) # End of Capturing Group (1)
答案 3 :(得分:1)
我有另一次尝试,基本上S是有效的,如果它在start | R和end | R之间,那么正则表达式将成为
(^ | R)(S +)(= R |?$)/ GI
function getMatches(string, regex, index) {
index || (index = 1); // default to the first capturing group
var matches = [];
var match;
while (match = regex.exec(string)) {
matches.push(match[index]);
}
console.log(matches);
return matches;
}
var regexp = /(^|R)(S+)(?=R|$)/gi;
getMatches('WSSSRSSWSSW', regexp, 2);
getMatches('SRWSSWRSRWSSWSRSS', regexp, 2);
getMatches('SSSSSS', regexp, 2);
getMatches('SRSRSSSSSSR', regexp, 2);

这里红色突出显示的部分是指第二组,即所需的匹配