正则表达式匹配单词中不包含的各个非空白字符

时间:2018-09-19 17:38:54

标签: regex

我正在尝试编写一个正则表达式来匹配特定单词中未包含的各个非空白字符。我最接近的是以下内容。

(?!word_to_discard)\b\S+\b

问题是上述表达式与不是word_to_discard的单词匹配,但与各个非空白字符匹配。有任何想法该怎么做吗?

2 个答案:

答案 0 :(得分:0)

让我们分解问题:

1)您需要匹配特定单词中未包含的字符。最简单的方法是使用带负号[ ]的字符组^。通过在字符组中添加\s令牌,我们还排除了任何空格字符。

[^word_to_discard\s]

2)现在,您说的是仅需匹配单个字符,因此可以使用边界标记\b来确保没有前/后字母数字字符。

\b[^word_to_discard\s]\b

3)为了匹配所有单个字符,您需要遍历所有匹配项。那件事是语言/引擎特定的。例如,在JavaScript中,您需要在正则表达式模式的末尾指定/g参数,以便随后的每次rgx.exec(text)调用都将在 text 中获得下一个匹配项:< / p>

const text = "w y o r d z";
const rgx = /\b[^word_to_discard\s]\b/g;

rgx.exec(text); // Matches "y"
rgx.exec(text); // Matches "z"
rgx.exec(text); // returns null (no more matches)

答案 1 :(得分:0)

正则表达式\b\S+\b在两个单词边界之间匹配一次或多次而不是空格,这样就不会给您单独的非空格字符。

您可以使用alternation来匹配您不想要的内容,例如word_to_discard,然后在组中捕获您想要匹配的内容。例如,您可以使用字符类来匹配word_to_discard中不包含的低位字符a,b或c [a-c],也可以使用\S来匹配空白字符。

word_to_discard|(\S)

Regex demo