1

次の文字配列で文字列を分割しようとしています。

"!", "%", "$", "@"

正規表現を使用することを考えたので、文字列を文字で分割すると思われる次の方法を開発しました。

var splitted = string.split(/\!|%|\$|@*/);

ただし、次のコードを実行すると、出力は期待していたものではなく、すべての文字で分割されます。

var toSplit = "abc%123!def$456@ghi";
var splittedArray = toSplit.split(/\!|%|\$|@*/);

splittedArray次の要素を含むようにするにはどうすればよいですか?

"abc", "123", "def", "456", "ghi"

どんな助けでも感謝します。

4

2 に答える 2

3

@*は空の文字列に一致し、任意の 2 文字の間に空の文字列があるため、文字列は 1 文字ごとに分割されます。+代わりに使用してください:

/\!|%|\$|@+/

また、 をグループ化する+だけでなく、すべての文字に適用することを意図している場合:@

/(\!|%|\$|@)+/

または、文字クラスを使用することをお勧めします。これらの文字はいずれも角括弧内で特別なものではないため、バックスラッシュを省略できます。

/[!%$@]+/
于 2012-12-18T22:37:30.293 に答える
2

以下を使用します。

var splittedArray = toSplit.split(/[!%$@]+/);

@*空の文字列に一致するため、現在のコードはすべての文字に分割されます。@*連続する文字を単一の区切り文字と見なしたいと思っていたので、これが正規+表現の最後にある理由だと思います。これは 1 つ以上の文字にのみ一致するため、空の文字列には一致しません。

[...]構文は文字クラスです。これは、単一の文字に対してのみ機能することを除いて、文字の代替に似ている|ため、 、、、またはの[!%$@]いずれかに一致します。文字クラス内では、エスケープ ルールが少し変更されるため、代わりに.!%$@$\$

于 2012-12-18T22:37:53.830 に答える