如果JavaScript字符串以连字符开头,则计数出现次数
基本上我有一个字符串数组,如下所示:如果JavaScript字符串以连字符开头,则计数出现次数,javascript,arrays,regex,Javascript,Arrays,Regex,基本上我有一个字符串数组,如下所示: var array = [ 'Top level', '- Sub item', '-- Child of sub', 'Another top', 'Yet another top', '- Child', ]; if (string.substring(0, 1) == "-") { // ... } else if (string.substring(0, 2) == "--") { /
var array = [
'Top level',
'- Sub item',
'-- Child of sub',
'Another top',
'Yet another top',
'- Child',
];
if (string.substring(0, 1) == "-") {
// ...
} else if (string.substring(0, 2) == "--") {
// ...
} else if (string.substring(0, 3) == "---") {
// ...
}
我尝试循环每个字符串并检查字符串是否以连字符开头,如果是,请计算次数,然后删除
我可以这样做:
var array = [
'Top level',
'- Sub item',
'-- Child of sub',
'Another top',
'Yet another top',
'- Child',
];
if (string.substring(0, 1) == "-") {
// ...
} else if (string.substring(0, 2) == "--") {
// ...
} else if (string.substring(0, 3) == "---") {
// ...
}
我还没有测试过,但你可以理解
我希望有一个更简单的解决方案也许用正则表达式?有什么帮助吗
谢谢
--编辑--
我需要计算并删除每个字符串中的连字符,因为我有一个文本区域供用户输入带有新行和连字符的字符串
文本区域值:
Top level
- Sub item
-- Child of sub
Another top
Yet another top
- Child
然后将textarea值分解为一个数组:
var array = textareaValue.split('\n');
for (var i = 0; i < array.length; i++) {
var this = array[i];
// Now check for hyphens and count how many
// if (hyphens === '-')
// else if (hyphens === '--') ...etc
};
var array=textareaValue.split('\n');
对于(var i=0;i
假设您已经在循环获取“string”(我在下面使用了“val”来消除可能与其他语言中的“string”类型混淆)
编辑:已测试,在此用法中不需要转义“-”
说明:
- .replace是所有字符串的方法
- 使用//允许使用正则表达式
- ^起跑线
- “-”文字
- “+”一个或多个
var matches = val.match("^(-+).*");
length = matches == null ? 0 : matches[1].length;
- match是所有字符串的方法
- “^”比赛开始
- “(“”)”应用在第二个匹配值中返回的组,即[1]
- ?:之所以使用,是因为如果没有匹配项,则匹配项将为空
var array = textareaValue.split('\n');
for (var i = 0; i < array.length; i++) {
var thisValue = array[i];
// Now check for hyphens and count how many
var matches = thisValue.match("^(-+).*");
var hyphenCount = matches == null ? 0 : matches[1].length;
var fixedValue = thisValue.replace(/^-+/, '')
};
var array=textareaValue.split('\n');
对于(var i=0;i
var count=[];
array=array.map(函数(str){
var match=str.match(/^(-*)?/);
count.push(匹配[1]。长度);
返回str.substr(匹配[0]。长度);
});
您可以使用正则表达式计算匹配项(即有多少连字符),然后使用相同的正则表达式匹配项替换它们
有关正则表达式和JavaScript的更多信息:您可以简单地映射字符串,使用正则表达式匹配(并隐式计算)连字符并附加每个字符串的其余部分
var数组=[
“顶级”,
“-分项”,
“--sub的孩子”,
“另一顶”,
“又一个顶级”,
“-孩子”,
];
函数countCharacter(数据,char){
var rex=//^(-*)(.*)$//;//第一组中的连字符,第二组中的正文
返回data.map(函数(it){
var res=it.match(rex);
控制台日志(res);
返回{
计数:res[1]。长度,
正文:res[2]
};
});
}
document.getElementById('r').textContent=JSON.stringify(countCharacter(数组“-”)代码>
另一个带有和的变体
var数组=[
“顶级”,
“-分项”,
“--sub的孩子”,
“另一顶”,
“又一个顶级”,
“-孩子”,
];
var mapped=array.map(函数(v){
var s,vv=0;
s=v.replace(/^-+/),函数(p1){
vv=p1.1长度;
返回“”;
})
返回{
名称:s,计数:vv
}
});
document.getElementById('res').innerHTML=JSON.stringify(mapped,null,2)代码>
以下是如何在单匹配调用中获得计数和替换:
for (var i = 0; i < array.length; i++) {
var elem = array[i];
var m = (elem.match(/^(-+)(.*)$/) || ['', elem]);
var count = m[1].length;
var replaced = m[2];
};
for(变量i=0;i
如果一个元素在开始时没有-
,那么上面的代码将得到count=0
并替换为与原始字符串相同的。然后删除什么?这不适用于所有带“-”的元素,请与第一个匹配;)抱歉,然后从字符串中删除连字符。我将编辑我的问题以包含更多信息。实际的最终结果是什么?列表还是下拉列表?这听起来像是一个X/Y问题