1. ホーム
  2. javascript

[解決済み] 文字列から特定の文字を切り取る

2022-04-21 18:53:58

質問

は何ですか? JavaScript に相当します。 C# メソッドです。

var x = "|f|oo||"; 
var y = x.Trim('|'); //  "f|oo"

C#は選択された文字を 始まり 終了 文字列の

解決方法は?

一行で十分です。

var x = '|f|oo||';
var y = x.replace(/^\|+|\|+$/g, '');
document.write(x + '<br />' + y);

^     beginning of the string
\|+   pipe, one or more times
|     or
\|+   pipe, one or more times
$     end of the string

一般的な解答です。

function trim (s, c) {
  if (c === "]") c = "\\]";
  if (c === "^") c = "\\^";
  if (c === "\\") c = "\\\\";
  return s.replace(new RegExp(
    "^[" + c + "]+|[" + c + "]+$", "g"
  ), "");
}

chars = ".|]\\^";
for (c of chars) {
  s = c + "foo" + c + c + "oo" + c + c + c;
  console.log(s, "->", trim(s, c));
}

パラメータ c は文字(長さ1の文字列)であることが期待されます。

コメントで言及されているように、複数の文字をサポートすると便利かもしれません。例えば、複数の空白文字のような文字をトリミングすることはよくあります。これを行うには マイティポーク を置き換えることを提案しています。 if を次のようなコードに置き換えてください。

c = c.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');

この部分 [-/\\^$*+?.()|[\]{}] は正規表現構文における特殊文字の集合であり $& はマッチングする文字を表すプレースホルダーで、つまりは replace 関数は特殊文字をエスケープします。ブラウザのコンソールで試してみてください。

> "{[hello]}".replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')
"\{\[hello\]\}"