[英]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.