[英]Regex: Match all words that do not contain hyphen
这是我到目前为止所拥有的:
\\b(?<!-)\\w+(?!-)\\b
匹配不包含连字符的内联词。
题:
有一种聪明的方法可以完成上述操作,但又不会在后面使用负面的看法吗? (聪明是可选的)
通常,您要匹配[^-]\\b(\\w+)\\b[^-]
-与连字符不相邻的单词。 这会很好用,但是由于它匹配单词边界,因此会消耗它们,并跳过其他所有单词,因为后面的单词不能匹配前导边界。 (它也不匹配行尾或开头,由非捕获组和备选方案来解决: (?:[^-]|^)\\b(\\w+)\\b(?:[^-]|$)
。 )
您需要有关单词边界的信息而不消耗字符。 您可以从前瞻性或后向性获取非消耗量: (?:[^-]|^)\\b(\\w+)\\b(?=[^-]|$)
与您的单词匹配。 这不适合问题陈述。
在我看来,您必须编写代码来获得无消耗而无需先行/落后。 RegExp对象存储最后消耗的字符的索引,因此我们可以通过稍微摆弄字符来“取消使用”字符。
function getAllWords(str) {
let pat = /(?:[^-]|^)\b(\w+)\b(?:[^-]|$)/g;
let res;
let words = [];
while (res = pat.exec(str)) {
words.push(res[1]);
pat.lastIndex--; //unconsume the word boundary so it can be matched again
}
return words;
}
由于前瞻大大简化了这一切,并阻止了您摆弄对象内部,所以我真的建议您仅使用前瞻。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.