0

我有这个字符串:'foo = bar; this = is; not = necessary'

我想得到这个结果:{"name" : "foo", "value" : "bar"}

没必要,后面是什么 ;

我知道,我应该使用一些正则表达式,但我不太了解正则表达式的工作原理。

谢谢提前,

4

2 回答 2

3

你可以使用:

var values='foo = bar; this = is; not = necessary'.split('; ')[0].split(' = ');
var obj={"name" : values[0], "value" : values[1]}

这样你就可以:

  1. 'foo = bar; this = is; not = necessary'.split('; '),它返回['foo = bar','this = is','not = necessary']
  2. 你只想要第一个元素,所以'foo = bar; this = is; not = necessary'.split(';')[0]'foo = bar'
  3. 然后你再次分裂:'foo = bar; this = is; not = necessary'.split(';')[0].split(' = '),这给了['foo','bar']
  4. 最后你创建了对象
于 2012-08-12T15:11:31.243 回答
1

一种使用正则表达式在特定字符串中搜索指定名称的方法,该名称将匹配foo = bar字符串的一部分:

function getNameValuePair(string, needle) {
    if (!string || !needle) {
        return false;
    }
    else {
        var newNeedle = needle + '\\s+\\=\\s+\\w+',
            expr = new RegExp(newNeedle),
            parsed = string.match(expr).join(),
            parts = parsed.split(/\s+\=\s+/),
            returnObj = {'name' : parts[0], 'value' : parts[1]};

        return returnObj;
    }
}

var string = 'foo = bar; this = is; not = necessary',
    nameValueObj = getNameValuePair(string, 'foo');

console.log(nameValueObj);

JS 小提琴演示

当然,这可以进行调整以更适合您的要求。

然而,事实上:

  1. 该函数检查两个参数是否存在,如果不存在,则简单地返回false
  2. 创建一个正则表达式模式,其中包含needle('foo' 在这种情况下),后跟一个或多个空白单元,后跟一个=字符,然后是一个或多个空白字符。如果空白可能并不总是存在,最好更改为newNeedle = needle + '\\s*\\=\\s*\\w+'+匹配“一个或多个”,*匹配“零个或多个”)。
  3. 从该模式创建一个正则表达式,
  4. 测试给定的字符串以查看它是否与模式匹配,如果匹配,则将匹配项存储在parsed变量中,
  5. 用另一个正则表达式拆分parsed变量,有效地拆分零个或多个空格后跟一个=零个或多个空格的模式,将分隔的部分存储在parts数组变量中,
  6. parts变量构造对象。
  7. 返回该变量。

稍微更新了上面的内容,因为创建一个 RegExp 的两行代码很愚蠢

function getNameValuePair(string, needle) {
    if (!string || !needle) {
        return false;
    }
    else {
        var expr = new RegExp(needle + '\\s+\\=\\s+\\w+'),
            parsed = string.match(expr).join(),
            parts = parsed.split(/\s+\=\s+/),
            returnObj = {'name' : parts[0], 'value' : parts[1]};

        return returnObj;
    }
}

var string = 'foo = bar; this = is; not = necessary',
    nameValueObj = getNameValuePair(string, 'foo');

console.log(nameValueObj);

JS 小提琴演示

参考:

于 2012-08-12T15:41:47.147 回答