我尝试使用javascript溢出来获取new
What#a_new%20day
我尝试了这样的代码:
<script>
var word="What#a_new%20day";
var newword = word.split("%20", 1).split("_", 2);
alert(newword);
</script>
但是造成了:
Uncaught TypeError: Object What#a_new has no method 'split'
也许有更明智的方法来获得我需要的词。所以有人可以帮助我吗?感谢。
答案 0 :(得分:5)
split
返回一个数组,因此第二个split
正在尝试对第一个返回的数组进行操作,而不是一个字符串,这会导致TypeError。您还需要在第二次调用split
后添加正确的索引,或者newword
也是一个数组,而不是您期望的字符串。将其更改为:
var newword = word.split("%20", 1)[0].split("_", 2)[1];
这会拆分word
,然后在结果数组的索引0处拆分字符串,并将新数组的索引1处的字符串值分配给newword
。
答案 1 :(得分:2)
正规救援
var word="What#a_new%20day";
var newword = word.match(/_(.+)%/)[1];
alert(newword);
这将返回正则表达式[1]
)中的第一个((...)
)捕获的组(_(.+)%
),其中_
后跟任何字符(.
)一次或多次(+
)后跟%
。
答案 2 :(得分:1)
split返回一个数组: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split
word.split(“%20”,1);
给出一个数组,所以你不能这样做:
(上面的结果).split(“_”,2);
答案 3 :(得分:1)
拆分的结果是数组,而不是字符串。所以你需要做的是
<script>
var word="What#a_new%20day";
var newword = word.split("%20", 1)[0].split("_", 2);
alert(newword);
</script>
注意 [0]
答案 4 :(得分:1)
如果拆分是您的追求,那就去做吧,但是表现明智,做这样的事情会更好:
var word="What#a_new%20day";
var newword = word.substr(word.indexOf('new'),3)
alert(newword);
拆分搜索文本中%20
的所有实例,而indexOf查找第一个实例,而substr也是相当便宜的性能。
分裂与子串的JsPerf统计(一般情况):http://jsperf.com/split-vs-substring