複数の文字列をセパレータとしてjqueryで文字列を分割する方法 を参照して、複数の区切り文字に基づいて文字列を分割しようとしました
複数の区切り文字があるので、
var separators = [' ', '+', '-', '(', ')', '*', '/', ':', '?'];
var tokens = x.split(new RegExp(separators.join('|'), 'g'));
しかし、私はエラーが発生しています
Uncaught SyntaxError: Invalid regular expression: / |+|-|(|)|*|/|:|?/: Nothing to repeat
解決方法
正規表現関連の文字+、-、(、)、* 、?にはエスケープが必要ですか?
var x = "adfds+fsdf-sdf";
var separators = [' ', '\\\+', '-', '\\\(', '\\\)', '\\*', '/', ':', '\\\?'];
console.log(separators.join('|'));
var tokens = x.split(new RegExp(separators.join('|'), 'g'));
console.log(tokens);
これは動作するはずです:
_var separators = [' ', '+', '(', ')', '*', '\\/', ':', '?', '-'];
var tokens = x.split(new RegExp('[' + separators.join('') + ']', 'g'));
_
生成された正規表現は正規表現文字クラス:/[ +()*\/:?-]/g
を使用します
この方法では、何もエスケープする必要はありません。
以下は、同じことを達成する簡単な方法です。
var tokens = x.split(new RegExp('[-+()*/:? ]', 'g'));
ご了承ください -
は最初に来る必要があります(またはエスケープする必要があります)、そうでない場合はrange
演算子(たとえば、a-z
)
ほとんどの正規表現言語で特別な意味を持っているため、+、*、および?をエスケープする必要があると思います
これは、+
や*
などの文字が正規表現で特別な意味を持つためです。
結合を|
から|\
に変更すると、リテラルをエスケープして問題ないはずです。