如何检测字符的第二次出现
How to detect 2nd appearance of character?
我正在尝试使用JavaScript向MediaWiki聊天添加工具箱。好吧,用这段代码,我对另一个MediaWiki页面(MediaWiki:Chat-herramientas-2)进行AJAX请求,以获取工具箱的内容,并在聊天中打印它。
工具箱内容的格式为:
- Navigation
* Page 1
* Page 2
* Page 3|Hahaha
* #|Execute script|hello()
第一行是第一个<<ul>(工具箱)。它具有类"active"。
第二行和第三行分别为"<a>"和href"#",文本分别为"第1页"answers"第2页"。
第四行有一个href,url为"…/第3页",文本为"哈哈哈"。
但在第五行中,我想插入一个空白href("#"),文本为"执行脚本",在第二行"|"之后添加带有"hello()"的onclick属性。
我无法完成,因为我不知道如何检测角色的第二次出现。完整的代码是:
$(function() {
var $chatheader = $('#ChatHeader');
select = 'MediaWiki:Chat-herramientas-2';
var $menu = $('<ul class="dropdown"></ul>')
.insertAfter($chatheader)
function flatten (options, indent) {
var flattened = [];
indent = indent || '';
for (var i = 0; i < options.length; i++) {
if ($.isArray(options[i])) {
flattened = flattened.concat(flatten(options[i], '* '));
} else {
flattened.push(indent + options[i]);
}
}
return flattened;
}
function render (lines) {
var options = '', selected = ' selected',
ignore = { '(': 1, ':': 1, '<': 1 };
for (var i = 0; i < lines.length; i++, selected = '') {
if (!lines[i].length || ignore[lines[i][0]]) {
continue;
}
var contents = mw.html.escape( lines[i].substring(2) );
if (lines[i].substring(0, 2) === '* ') {
var clase = contents.replace(/[^a-z0-9's]/gi, '').replace(/[_'s]/g, '-').toLowerCase();
var url = contents.replace(/[^a-z0-9's]/gi, '').replace(/[_'s]/g, '-').toLowerCase();
var checksitiene = /'|/g.test(contents)
if(checksitiene) {
var wachem = contents.replace(/'|/,'">');
options += '<li class="' + clase + '"' +
selected + '><a target="_blank" href="/wiki/' + wachem + '</a></li>';
} else {
options += '<li class="' + clase + '"' +
selected + '><a href="#">' + contents + '</a></li>';
}
} else {
options += '<li class="active">' + contents + ' <span>▼</span></li>';
}
}
$menu.append(options);
}
if (typeof select === 'string') {
$.get('/wiki/' + select + '?action=raw&ctype=text/javascript')
.done(function (data) {
render(data.split(/'r'n|'n|'r/));
});
} else if ($.isArray(select)) {
render(flatten(select));
}
});
String.prototype.indexOf
接受两个参数,第一个是要匹配的字符串,第二个是开始匹配的索引。请参阅MDN。
因此,在使用indexOf
查找字符串的第一个实例后,您可以从该索引+(匹配字符串的长度)中搜索以查找下一个匹配项。
一个可以多次调用以接收字符串中下一个索引的函数:
function makeIndexer(text,pattern,start){
start = start||0;
var patternLength = pattern.length
, initialStart = start
;
return function(){
var index = text.indexOf(pattern,start);
if(index === -1){ //start over from initial start index after we reach the end
start = initialStart;
}else{
start = index + patternLength;
}
return index;
}
}
然后这样使用:
var nextIndex = makeIndexer("Wow, what an awesome function!","w")
nextIndex() //2 still case sensitive like indexOf
nextIndex() //5
nextIndex() //14
nextIndex() //-1 Like indexOf, returns -1 when there are no more matches
nextIndex() //2 starting over
相关文章:
- Javascript Select OnChange没有'不要第二次工作
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- 单击仅在第二次单击后有效
- 推特引导:弹出窗口不会在第一次点击时出现,但会在第二次点击时显示
- 第二次点击具有不同功能的按钮并更改文本
- 第一个字第一个字符第二个字第二个字符,一直到数组结束
- 更改第二次推送时不起作用的元素高度
- 在第二次选择中选择2更改属性
- on(“点击”)仅在第二次点击后触发
- 在HTML中,如果第二次加载相同的脚本文件,它还会被加载吗
- Sails.js/Waterline.add()和.remove()仅适用于第二次调用
- 尝试在两次迭代中警告同一选择器的值,在第一次迭代中得到正确的值,而在第二次迭代中获得不正确的值.为什么?
- java脚本中的谷歌地图在第二次点击时不起作用
- 更改类名后,将第二次单击事件附加到元素
- 提交按钮只能在onchange调用输入文本后第二次点击时工作
- 将音频第二次转换为分钟和秒格式
- Jquery移动转换复选框在Jquery onclick函数()中第二次选中不起作用
- 在连续第二次单击时禁用href
- 正在给用户第二次尝试
- 如何检测字符的第二次出现