我正在尝试使用Regex做很多方法,但我不具备正则表达式的强大技能。
我的情况是,我有这个字符串What is this and this is cool
,在这种情况下我需要拆分is
但我不会拆分What is
,我只想拆分{{1}在is
和this
之间。
我尝试使用此正则表达式cool
,但这将返回(?!What)....(\sis\s)
,我只需要第二个this is
。
谢谢高级
答案 0 :(得分:1)
单线程正则表达式解决方案:
(?:\bis\b)?((?:(?!\bis\b)(?:What\s+is\b)?.?)+)
JS代码:
var re = /(?:\bis\b)?((?:(?!\bis\b)(?:What\s+is\b)?.?)+)/;
console.log(
"What is this and is What is this is cool What is this is"
.split(re)
.filter(Boolean)
);

此正则表达式尝试匹配is
字词,只要它变为1,否则只要它们不是What is
,它就会继续匹配is
个字符或其他字符。它匹配并捕获is
以外的任何内容。
这里的技巧是使用调节令牌来查看下一次出现是否为is
。如果没有,请尝试匹配What is
或单个字符。此过程一直持续到is
。
(?:\bis\b)?
尝试匹配单词is
(
开始捕获组#1
(?:
开始非捕获组
(?!\bis\b)
看下一个单词是is
(?:What\s*is\b)?.?
如果没有尝试匹配What is
或单个字符或)+
重复尽可能多的)
结束捕获组#1 split()
方法将捕获组中的匹配部分视为输出数组,从而在正则表达式中匹配is
并捕获任何其他内容。
为了避免分割What
以外的其他单词,您只需要在组内的替换中添加每个单词:
(?:\bis\b)?((?:(?!\bis\b)(?:(?:What|How|Who)\s+is\b)?.?)+)
您可能需要设置i
标记,以便在需要或分割时捕获what is
。