【发布时间】:2016-02-17 09:32:40
【问题描述】:
我正在使用 JavaScript .split() 来拆分 URL 参数。
当且仅当它存在于字母数字字符旁边时,是否可以使用 Regex 捕获 & 的匹配项?
例子:
不匹配: ?category=Health+&+Wellness
匹配:
?category=Health&Wellness
不匹配第一,匹配第二:?category=Health+&+Wellness&tag=Diet
我正在使用一个脚本,该脚本从我的 Web 模板中的 data-url 属性中的 URL 中提取参数。这是参数脚本的部分sn-p。
var query = decodeURIComponent( str ).match( /[#|?].*$/g ),
ret = {};
if ( query ) {
query = query[ 0 ].replace( /^\?|^#|^\/|\/$|\[|\]/g, "" );
query = query.split( "&" );
for ( var i = query.length; i--; ) {
var pair = query[ i ].split( "=" ),
key = pair[ 0 ],
val = pair[ 1 ];
if ( ret[ key ] ) {
if ( {}.toString.call( ret[ key ] ) !== "[object Array]" ) {
ret[ key ] = [ ret[ key ] ];
}
ret[ key ].push( val );
} else {
ret[ key ] = val;
}
}
}
我当前代码的问题在于split() 行。现在它会拆分像Health+&+Wellness 这样的参数,我不希望发生这种情况。
【问题讨论】:
-
&符号在 URI 格式中保留。您应该对 uri 进行 urlencode,然后Health & Wellness将变成像?category=Health+%26+Wellness一样的东西,或者将其替换为其他内容,例如?category=Health+and+Wellness并来回转换。 -
我认为你需要
/\b&\b/g(如果字母和_应该在两边),或者/\b&|&\b/g(如果单词字符只需要在一侧) -
如果我尝试这个类别会怎样:
m&m's? -
这是我目前的困境。我的脚本从我用于 AJAX 请求的 URL 中提取参数并将它们放入数据对象中。该 URL 是从我的网站中从数据属性中提取的。不幸的是,出于某种奇怪的原因,我在解码和编码方面遇到了麻烦。所以我现在所处的位置是我需要使用一个未编码的参数。我将编辑以添加更多幕后参数脚本。
-
您是否可以控制生成 URL 的内容?如果是这样,您需要修复这些问题。
&术语应该是 URL 编码的(当然,URL 编码应该总是在每个组件上单独完成)。此外,如果它包含在 HTML 属性中,则它也需要进行 HTML 属性编码(即&替换为&等)。
标签: javascript regex string split url-parameters