我需要一个JS正则表达式来匹配仅基于已知的第一个和最后一个子字符串以及空格数的字符串 - 而且我不关心第一个和最后一个之间的长度或性质子字符串(除了确切的空格数)。
以下是一个可能的起始字符串(我从中获取第一个和最后一个子字符串以及空格数):
cat apple dog mouse
由此,我现在知道字符串以cat
开头,以mouse
结尾,并且恰好包含3个空格(它们可以在两端之间的任何位置,但它们不会是连续的)。< / p>
我需要匹配的字符串可能是:
catfish mouse mouse dormouse mouse mouse
或cat mouse mouse mouse mouse mouse
因此,我需要匹配的是第一种情况catfish mouse mouse dormouse
和第二种情况cat mouse mouse mouse
- 在两种情况下都是以cat
开头的字符串,以{结尾{1}}并且恰好包含3个空格。目前,我的所有尝试都与上面的整个示例字符串匹配,而不仅仅是从mouse
到第三个cat
。这是我最近的失败:
mouse
我有一种强烈的怀疑,我过度思考这一点 - 但感谢您的任何建议。
答案 0 :(得分:1)
你可以写一个正则表达式,而不用提前做这件事。
示例强>
\bcat(?:[^\s]*\s){3}[^\s]*mouse\b
https://developer.android.com/training/location/retrieve-current.html#setup
<小时/> 它的作用是什么?
\b
匹配单词边界。这可确保它不会匹配以mousexyz
cat
在字符串cat
(?:[^\s]*\s){3}
[^\s]*
匹配空间以外的任何内容。因此,这个匹配单个单词,以下\s
匹配单词后的空格。{3}
确保带空格的单个字重复3次。[^\s]*
匹配3个空格后的空格以外的任何字符。mouse
匹配字符串末尾的鼠标 为什么cat(?:(?![\s]{4,}).*)mouse
不起作用?`
(?![\s]{4,})
这种否定的预测,将检查cat
是否立即,然后是4个空格。这是真的,因此它匹配所有输入字符串。答案 1 :(得分:0)
我并没有像nu11p01n73R那样擅长正则表达式但是我试着玩得很开心:
/cat[^\s]*(\s[^\s]+){2}\s[^\s]*?mouse/
它很丑,但是当我测试它时它起作用了
寻找'猫'
然后遍历任何非空白
做两次 {
然后找一个空格
然后查找至少一个非空格的字符
}
然后遍历任何非空白
直到找到鼠标