JavaScript RegExはブラウザで動作しますが、PHPDesktop v5.7Windowsでは動作しません

2
2022.01.14

次のコードは、ブラウザ上で完全に動作します。

console.log("abc> >".replace(/>(?<!abc>)/gm, "<"));

しかし、PHPDesktop V5.7 Windowsで実行すると、次のエラーが発生します。

Uncaught SyntaxError: Invalid regular expression: />(?<!abc>)/: Invalid group

これは、このバージョンのPHPDesktopで実行していると思われる古いバージョンのJavaScriptが原因である可能性があります。

RegEx で行おうとしているのは、'abc' が先行していない場合にのみ、文字 '>' を '>' に置き換える必要があります。

abc> >

次のようになります。

abc> <

私がこれを行うことができる別の方法はありますか?

回答
3
2022.01.14

問題は、PHPDesktop が、後読み機能をサポートしていない以前のバージョンの JavaScript を使用していることです。コールバックで正規表現の置き換えを使用する 1 つの回避策を次に示します。

var input = "abc> >";
var output = input.replace(/\babc>|>/g, x => x === "abc>" ? "abc>" : "<");
console.log(input);
console.log(output);

正規表現パターン\babc>|>の背後にある考え方は、まずabc>に一致し、その後に>を単独で一致させることです。次に、コールバックロジックでは、abc>の no-op を返して同じものを返します。

2
2022.01.14

この正規表現を試してみてください:

([^a\r\n][^b\r\n][^c\r\n])>

各一致を$1<に置き換える

クリックしてデモ

console.log("abc> >".replace(/([^a\r\n][^b\r\n][^c\r\n])>/gm, "$1<"));


説明:

  • ([^a\r\n][^b\r\n][^c\r\n]) -(a または改行) の後に、その後に(b または改行) 以外の文字が続く任意の文字(c または改行) に一致し、グループ 1 でこの一致をキャプチャします。
  • > - > と一致します。

一致したものは、グループ1の内容に置き換え、続いて<を置き換えることができます。