如何在主表达式之前匹配模式?

时间:2017-08-05 15:21:54

标签: javascript regex

很抱歉,如果此问题的上下文感觉曾被问过。 我是新来的,也是RegEx的新手。

我一直试图解决问题,并使用http://regexr.com(精彩网站!)部分解决了问题。

  

有3种颜色的礼物:红色(R),藏红花(S),白色(W)。你想只选择藏红花礼物。   据信,白色礼物旁边的藏红花礼物是不好的'以及与“不好”相关的藏红花礼物。 (S)礼物也不好['你想给你的朋友好礼物。   红色礼品接近“不好”。礼物仍然很好" **

基本上,S in ... RSR ......很好,但不应该是WSW或SWS组的旁边。 SSSS ...... S很好。

Sample case

WSSSRSSWSSW
SSSSSS
SRSRSSSSSSR
SRWSSWRSRWSSWSRSS

enter image description here

/S(?!S*W)/g

我使用了它,除了WSSS(第一行文本)中的S和最后一行之外它有效。

我该如何解决? 谢谢你的时间(:

4 个答案:

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




The red highlight denotes the 2nd group

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

相关问题