基于值的 JavaScript 字符串分割

4

我有一个单变量对象值,格式如下:

"Landing Hits: 0Rewards Hits: 0Facebook Posts: 0Twitter Tweets: 0Twitter Autofollows: 0Instagram Photos: 0Instagram Likes: 0Instagram Votes: 0Pinterest Pins: 0Form Submissions: 0Submissions: 0Engagement: 0Views: 0Prints: 0"

我需要将它转换为:

"Landing Hits: 0, Rewards Hits: 0, Facebook Posts: 0, Twitter Tweets: 0, Twitter Autofollows: 0, Instagram Photos: 0, Instagram Likes: 0, Instagram Votes: 0, Pinterest Pins: 0, Form Submissions: 0, Submissions: 0, Engagement: 0, Views: 0, Prints: 0"

有什么想法如何做到这一点吗?

似乎你应该修复源代码。 - charlietfl
4个回答

4

您可以使用正则表达式来搜索匹配项。

var str = "Landing Hits: 0Rewards Hits: 0Facebook Posts: 0Twitter Tweets: 0Twitter Autofollows: 0Instagram Photos: 0Instagram Likes: 0Instagram Votes: 0Pinterest Pins: 0Form Submissions: 0Submissions: 0Engagement: 0Views: 0Prints: 0";

var arr = str.match(/[^:]+\s*:\s*\d+/g); //Find values like `String:Number`

var out = arr.join(", "); //Convert array matches to String

document.write("<pre>" + out + "</pre>"); //Test

只需要替换:如果你只需要替换字符串,也可以这样做:

var str = "Landing Hits: 0Rewards Hits: 0Facebook Posts: 0Twitter Tweets: 0Twitter Autofollows: 0Instagram Photos: 0Instagram Likes: 0Instagram Votes: 0Pinterest Pins: 0Form Submissions: 0Submissions: 0Engagement: 0Views: 0Prints: 0";

var formatted = str.replace(/(\d)(\w)/g, "$1, $2");

document.write(formatted)

将值扩展到对象中:这可以让您将获取的值用于其他目的。

var str= "Landing Hits: 0Rewards Hits: 0Facebook Posts: 0Twitter Tweets: 0Twitter Autofollows: 0Instagram Photos: 0Instagram Likes: 0Instagram Votes: 0Pinterest Pins: 0Form Submissions: 0Submissions: 0Engagement: 0Views: 0Prints: 0"
, regex = /([^:]+)\s*:\s*(\d+)/g, collection = {}, temp;

while(temp = regex.exec(str)){
  collection[temp[1]] = +temp[2]
}

console.log(collection)

enter image description here


谢谢你的帮助。非常好的解决方案。在Csv文件中,键和值出现在同一列中,现在我想显示与键相关的值在其他列中......有什么建议吗? - Bharat Bhushan
你可以在你的问题中提供一个例子吗? - Walter Chapilliquen - wZVanG
我已经创建了CSV下载功能。因此,当我下载Excel文件时,键和值出现在同一列中。所以,我只是试图在与键相关的第二列中获取值。 - Bharat Bhushan

0
在你的代码中添加以下行:

var str = "Landing Hits: 0Rewards Hits: 0Facebook Posts: 0Twitter Tweets: 0Twitter Autofollows: 0Instagram Photos: 0Instagram Likes: 0Instagram Votes: 0Pinterest Pins: 0Form Submissions: 0Submissions: 0Engagement: 0Views: 0Prints: 0";

alert(str.replace(/0|_/g,'0,'));


该值不一定会为零。 - Walter Chapilliquen - wZVanG

0
你可以尝试这个:
var c = "Landing Hits: 0345Rewards Hits: 0Facebook Posts: 0Twitter Tweets: 034534532Twitter Autofollows: 0Instagram Photos: 0Instagram Likes: 0Instagram Votes: 0Pinterest Pins: 0Form Submissions: 0Submissions: 0Engagement: 0Views: 0Prints: 0";
var array = [];
var counter = 0;
var num;
var dup = '';
for (var i = 0; i < c.length; i++) {
  dup += c[i];
  if (c[i] === ':') {
    dup += ' ';
  }
  if (!isNaN(c[i]) && isNaN(c[i + 1]) && c[i] !== ' ') {
    dup += ', ';
  }
}
alert(dup);

链接(JSFiddle):https://jsfiddle.net/eugensunic/kphe5fbL/13/


0

你不需要使用正则表达式

var str = "Landing Hits: 0Rewards Hits: 0Facebook Posts: 0Twitter Tweets: 0Twitter Autofollows: 0Instagram Photos: 0Instagram Likes: 0Instagram Votes: 0Pinterest Pins: 0Form Submissions: 0Submissions: 0Engagement: 0Views: 0Prints: 0";
var newStr = str.split(0).join('0, ').slice(0, -2);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接