段落記号(¶)または偏微分(∂)文字の正規表現パターン

Aug 19 2020

現在 と表示されている文字列内の段落記号/偏微分文字を検索/置換または変換する必要があります。

私が思ったのはうまくいくがうまくいかない:

const value = 'Javascript Regex pattern for Pilcrow (¶) or Partial Differential (∂) character';
const matches = value.match(/\u2029/gmi);
console.log(matches);

しかし、空を返します。

正直なところ、私は自分がしなければならないことをどのように達成するかさえわかりません。

回答

5 ÁlvaroGonzález Aug 19 2020 at 21:16

正しいUnicodeコードポイントはU + 00B6とU + 2202ではなくU + 2029。また、式で[]文字範囲を使用することもできます。

const value = 'Javascript Regex pattern for Pilcrow (¶) or Partial Differential (∂) character';
const matches = value.match(/[\u00B6\u2202]/gmi);
console.log(matches);

もちろん、そもそも\ uエスケープは必要ありません。

const value = 'Javascript Regex pattern for Pilcrow (¶) or Partial Differential (∂) character';
const matches = value.match(/[¶∂]/gmi);
console.log(matches);

最後になりましたが、あなたはこう言います:

現在、「」と表示されています。

その場合、そもそも適切にエンコードされていない可能性があります。言い換えれば、あなたは見つけられない、彼らがそこにいないからです。最初にこれに対処することをお勧めします。

3 KunalMukherjee Aug 19 2020 at 20:34

使用String.prototype.codePointAtユニコードUTF-16コード・ポイントを抽出し、六角数字シーケンスに変換します。

const toUnicodeCodePointHex = (str) => {
    const codePoint = str.codePointAt(0).toString(16);
    return '\\u' + '0000'.substring(0, 4 - codePoint.length) + codePoint;
};

const value = 'Javascript Regex pattern for Pilcrow (¶) or Partial Differential (∂) character';

const re = new RegExp(['¶', '∂'].map((item) => toUnicodeCodePointHex(item)).join('|'), 'ig');

const matches = value.match(re);
console.log(matches);

articleMathiasBynensによるこれはとても素敵です。

1 JordanStubblefield Aug 19 2020 at 20:55

それらは16進値または8進値で見つけることができます。

const matches = value.match(/\u00B6|\u2202/g);

それぞれの正規表現:

段落記号:\u00B6または\xB6または\266

偏微分: \u2202