Javascript 正则表达式用于所有不在特定字符之间的单词

Javascript Regex for all words not between certain characters

本文关键字:字符 之间 单词 用于 正则表达式 Javascript      更新时间:2023-09-26

我正在尝试返回不在方括号内的所有单词的计数。所以给定..

[don't match these words] but do match these

最后四个字我数到 4

这适用于 .net:

'b(?<!'[)['w']+(?!'])'b

但它在 Javascript 中不起作用,因为它不支持回溯

关于纯 js 正则表达式解决方案的任何想法?

好的

,我认为这应该有效:

'[[^']]+'](?:^|'s)(['w']+)(?!'])'b|(?:^|'s)(['w']+)(?!'])'b

您可以在此处进行测试:
http://regexpal.com/

如果您需要一个备选案文,

在正文之后加上方括号中的案文,则可以将其添加为第二个备选案文,而当前的第二个备选案文将成为第三个备选案文。
这有点复杂,但我现在想不出更好的解决方案。

如果您需要对实际匹配项执行某些操作,则可以在捕获组中找到它们。

更新:

解释:因此,我们这里有两个选择:

  1. '[[^']]+'](?:^|'s)(['w']+)(?!'])'b

这是在说:

  • '[[^']]+'] - 匹配方括号中的所有内容(不捕获(
  • (?:^|'s) - 后跟行开始或空格 - 当我现在查看它时,请取出插入符号,因为它没有意义,所以这将变得's
  • (['w']+) - 匹配所有后续单词字符,只要(?!'])下一个字符不是右括号 - 好吧,现在这可能也是不必要的,所以让我们尝试删除前瞻
  • 'b - 和匹配词边界

2 (?:^|'s)(['w']+)(?!'])'b

如果您找不到选项 1 - 只进行单词匹配,而不寻找方括号,因为我们在第一部分确保它们不在这里。

好的,所以我删除了所有我们不需要的东西(他们留在那里,因为我在它起作用之前尝试了很多选项:-(修订后的正则表达式如下:

'[[^']]+']'s(['w']+)(?!'])'b|(?:^|'s)(['w']+)'b

我会使用 '[[^']]*'] 之类的东西来删除方括号之间的单词,然后用空格分解返回的字符串以计算剩余的单词。

Chris,复活这个问题,因为它有一个简单的解决方案,没有提到。(在对如何在正则表达式中排除模式的一般问题进行一些研究时发现了您的问题。

这是我们的简单正则表达式(在 regex101 上查看它的工作,查看右下面板中的组捕获(:

'[[^']]*']|('b'w+'b)

交替的左侧匹配完全[bracketed groups]。我们将忽略这些匹配。右侧匹配并捕获组 1 的单词,我们知道它们是正确的单词,因为它们与左侧的表达式不匹配。

该程序展示了如何使用正则表达式(请参阅在线演示中的计数结果(:

<script>
var subject = '[match ye not these words] but do match these';
var regex = /'[[^']]*']|('b'w+'b)/g;
var group1Caps = [];
var match = regex.exec(subject);
// put Group 1 captures in an array
while (match != null) {
    if( match[1] != null ) group1Caps.push(match[1]);
    match = regex.exec(subject);
}

document.write("<br>*** Number of Matches ***<br>");
document.write(group1Caps.length);
</script>

参考

如何匹配(或替换(模式,除非在 s1、s2、s3 的情况下...