在PCRE中模拟未知宽度的负面观察

时间:2017-10-12 11:54:03

标签: regex pcre

我有following regex

(?<=:)\s*\w+

我只想从字符串中提取comp comp

savedPosition: comp;
CURLSCHET.NREC ('qwertyuiop'): noprotect;

如果在所需模式之前的任何地方有noprotect(,我希望避免匹配)等案例。

3 个答案:

答案 0 :(得分:0)

你应该试试这个:

const arr = [1, 7, 4, 5, 3, 6, 2];

const sorted = 
  [].concat(arr).sort((a,b) => a-b).map((a, ix, arr) => {
    const isEnd = ix % 2;
    const dv = Math.trunc(ix / 2);
    if (!isEnd) return arr[arr.length -1 -dv];
    else return arr[dv];
  });

console.log(sorted);

说明:

  1. [^\(\):]*:\s*(\w*) 捕获所有没有的东西(和(和:
  2. [^\(\):]*:以下:
  3. :后跟零个或多个空格字符
  4. \s*后跟零或更长的字
  5. Demo

    <强>替代:

    如果您不想匹配之前的部分,那么您也可以尝试这个解决方案:

    \w*

    Alternative Demo

答案 1 :(得分:0)

PCRE不支持未知宽度的负面后视(.NET确实会看起来like this),但您可以在第一个(或{之前的每一行上提取所有匹配项{1}}使用)\G运算符的组合,在否定字符类\K的帮助下,除了[^()](之外的任何字符都匹配

您可以使用

)

请参阅regex demo

<强>详情

  • (?m)(?:^|\G)[^()\n]*?:\h*\K\w+ -
  • 上的MULTILINE模式
  • (?m) - 匹配字符串/行的开头或上一个匹配的结尾
  • (?:^|\G) - 除[^()\n]*?(和换行符之外的任何0 +字符,尽可能少
  • ) - 冒号
  • : - 0+水平空格
  • \h* - 匹配重置运算符,丢弃目前为止匹配的所有文本
  • \K - 一个或多个单词字符。

答案 2 :(得分:0)

: *\K\w+

: matches the character : literally (case sensitive)
 *
matches the character   literally (case sensitive)
* Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy)
\K resets the starting point of the reported match. Any previously consumed characters are no longer included in the final match
\w+
matches any word character (equal to [a-zA-Z0-9_])
+ Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)