2013-11-23 149 views
0

我使用jQuery的JTable插件显示存储在我的MySQL数据库会话变量数据,这将是格式:的Javascript提取值从字符串

gateway|i:1;FirstName|s:7:"Shelley";LastName|s:2:"VS";Status|s:7:"Enabled";UID|s:10:"b81ef6a12a";AdminGroup|s:8:"Sysadmin"; 

我JTable中列显示所有的会话数据这不是必需的。我需要使用JavaScript从字符串中仅提取FirstName部分。我是一个JavaScript新手。我做了以下内容:

name: { 
    title: 'Admin Name', 
    display: function (data) { 
     var x = data.record.data; 
     if(x.match("FirstName")) { 
      return "yes"; 
     } 
    }, 
}, 

FirstName数据在字符串中使用x.match发现在我的新jtable列该款显示器“是”。我如何才能使用javascript从上述文本中仅提取名字部分。我将有相同格式的多个记录。

在此先感谢。

添加到我原来的职位

@cytofu出色答卷的newbie..I改变了代码,以满足我的JTable(无附加功能),如下所示,运行良好:谢谢。

firstname: { 
title: 'First Name',      
display: function (data) { 
var str = data.record.data; 
var startOfSection = str.indexOf('FirstName'); 
var startOfValue = str.indexOf('"',startOfSection)+1; 
var endOffValue = str.indexOf('"',startOfValue); //one char longer, as needed for substring 
var value = str.substring(startOfValue,endOffValue); 
return value; 
}, 
}, 

//last name 

lastname: { 
title: 'Last Name',      
display: function (data) { 
var str = data.record.data; 
var startOfSection = str.indexOf('LastName'); 
var startOfValue = str.indexOf('"',startOfSection)+1; 
var endOffValue = str.indexOf('"',startOfValue); //one char longer, as needed for substring 
var value = str.substring(startOfValue,endOffValue); 
return value; 
}, 
}, 
+3

我不认识的格式,是什么呢?有没有特别的理由不使用XML或JSON? –

+0

而不是写一个自定义解析器,让我们考虑一下它的来源,就是说它是可访问的。你不会偶然使用[PHP的序列化函数](http://php.net/serialize),你会吗?(看起来你只是用|)换出了{}?如果是这种情况,而不是序列化,请考虑[使用json_encode编码为JSON](http://php.net/json_encode),因为它可以在JS中轻松解码(解析)。 – zamnuts

回答

0

这个功能添加到脚本:

function extractValue(str,searchStr){ 

    var startOfSection = str.indexOf(searchStr); 
    var startOfValue = str.indexOf('"',startOfSection)+1; 
    var endOffValue = str.indexOf('"',startOfValue); //Position of first char AFTER the value, as needed for substring 

    var value = str.substring(startOfValue,endOffValue); 

    return value; 
} 

你可以测试一下210

var str = 'gateway|i:1;FirstName|s:7:"Shelley";LastName|s:2:"VS";Status|s:7:"Enabled";UID|s:10:"b81ef6a12a";AdminGroup|s:8:"Sysadmin";'; 
var searchStr = 'FirstName|'; 

alert (extractValue(str,searchStr)); 

改变你的JTable功能片段如下:

name: { 
    title: 'Admin Name', 
    display: function (data) { 
     var x = data.record.data; 
     if(x.match("FirstName")) { 
      return extractValue(x,"FirstName"); 
     } 
    }, 
}, 

小提琴:http://jsfiddle.net/nBG89/7/

+0

在小提琴中运行它不会产生任何结果? – shels

+0

警报返回结果..但是返回(firstName);没有产出? – shels

+0

它将输出记录到控制台,我将其更改为提醒结果。我也删除了;从搜索字符串开始,以便它可以被发现,如果它是第一个条目。 – cytofu

2

您有三种常用方法:

  • 解析整个字符串为对象。在这种情况下,.split()是你最好的朋友;
  • 将传入格式更改为JSON;
  • 用正则表达式让您的数据:

    var patient = 'gateway|i:1;FirstName|s:7:"Shelley";LastName|s:2:"VS";Status|s:7:"Enabled";UID|s:10:"b81ef6a12a";AdminGroup|s:8:"Sysadmin";';

    alert(patient.match(/FirstName\|\w\:\d+\:\"(\w+)\"/)[1]);

+0

+1如何添加姓氏... – shels

+0

您可以在其中添加另一个带有姓氏的正则表达式**,但**如果您需要多于两个字符串的项目,最好解析整个字符串,它的字段。 – Tommi