JavaScript の正規表現では後読みできません。先読みはできますが、IE では信頼性が低いため、自分が何をしているのか本当によくわかっていない限り、避けるのが最善です。
[^&(?!amp;)]+&
ええ、これは本当に意味がありません。文字グループで先読みを使用することはできません。ここで[]
言っているのは、、、、、、、、、、またはで&
はない一致文字です。(
?
!
a
m
p
;
)
ただし、とにかく見る必要はありません&
。プレーンでエンコードされていないクエリ文字列で作業する必要があります。から取得したとおりlocation.search
。(正規表現を使用して文字列内の HTML マークアップをハッキングしている場合、はるかに大きな問題が発生します。)
からクエリ文字列を取得している場合、クエリがlocation.search
ある場合は先頭に があります?
。したがって、先頭を または のいずれ&
か?
と一致させ、正規表現の一致を次のように行うことができます。
location.search.replace(
/([?&;]category=)[^&;]+/,
'$1'+encodeURIComponent(sNewValue)
);
また;
、HTML4 セクション B.2.2 に従って可能なセパレーターとして含め、encodeURIComponent
スペースなどの無効な文字や&
それ自体などの特殊文字が適切に URL エンコードされるように使用しました。また、$
そうでなければ正規表現置換文字列で特別な意味を持つ文字 。
c%61tegory
これはまだ非常に厄介で、URL エンコードされたパラメーター名 (つまり、有効な別の言い方ですcategory
) や、同じ名前の複数のパラメーターには対応していません。より堅牢にしたい場合は、正規表現をダンプして、完全なクエリ文字列の解析/再構築を行うことができます。この回答の関数を見て、次のことを行います。
var lookup= queryToLookup(location.search);
lookup['category']= ['New value'];
var query= lookupToQuery(lookup);