Javascript 不使用JSON解析字符串对象

Javascript 不使用JSON解析字符串对象,javascript,parsing,Javascript,Parsing,我需要从html元素属性解析一个对象(就像angular那样),而不需要使用JSON.parse之类的东西 例如,我有一个像这样的DIV <div some-attribute="{key1: 1 > 0, key2: true || false}"></div> 有没有能力在不发明新解析器的情况下以这种方式解析它?您想最终得到[Object]?您可以在[String]值中搜索、和:,然后按如下方式拆分它: //使用DOM方法从属性中检索此属性 var a=“{

我需要从html元素属性解析一个对象(就像angular那样),而不需要使用JSON.parse之类的东西

例如,我有一个像这样的
DIV

<div some-attribute="{key1: 1 > 0, key2: true || false}"></div>

有没有能力在不发明新解析器的情况下以这种方式解析它?

您想最终得到
[Object]
?您可以在[String]值中搜索
,然后按如下方式拆分它:

//使用DOM方法从属性中检索此属性
var a=“{key1:1>0,key2:true | | false}”;
log(解析(a));
函数解析(数据){
if(data[0]!='{'| | data[data.length-1]!='}')返回null;//如果没有用,请删除它
var props=data.slice(1,data.length-1).split(/\s*,\s*/);
var newObj={};
道具forEach((a)=>{
var pair=a.split(/\s*:\s*/);
newObj[pair[0]]=pair[1];
});
返回newObj;

}
谢谢大家,我意识到我应该为此创建一个解析器。这是第一个版本(关于咖啡,不是纯JS)


当作为Javascript计算时,
some属性
属性的值生成的对象与您在HTML代码下面发布的对象不同。
{key1:1>0,key2:true | | | false}
{key1:true,key2:true}
相同,这与
{key1:0',key2:true | | false}完全不同
。第一个对象的属性有布尔值(
true
),它们是第二个对象上的字符串。来吧,我在问一个相关的问题。--如果你要求我们提供一个离题的“解析库”,我的意思是你问如何计算
2+2
,但不是
4
,你希望得到你提到的
'2'+'2'
@dimaninc,你看了吗?如果键中有逗号呢?像
{'key1,key7':1>0}
必须有一些限制,甚至在构造
{{…}
表达式时也有很多限制。这不是AI:)
{'key1': '1 > 0', 'key2': 'true || false'}
class Parser
    self = @

    constructor: ->

    @quotes: '\'"`'

    @object: (dataStr) ->
        dataStr = $dp.fn.trim dataStr
        if dataStr[0] isnt '{' or dataStr.slice(-1) isnt '}'
            return null
        dataStr = dataStr.slice 1, dataStr.length - 1

        o = {}
        pair =
            key: ''
            value: ''
        addPair = ->
            o[$dp.fn.trim(pair.key)] = $dp.fn.trim pair.value
            pair.key = pair.value = ''
        quoteOpened = null
        underCursor = 'key'

        for ch, i in dataStr
            skip = false

            if ch in self.quotes
                unless quoteOpened
                    quoteOpened = ch
                    skip = true
                else if quoteOpened and ch is quoteOpened
                    quoteOpened = null
                    skip = true

            unless quoteOpened
                switch
                    when ch is ':'
                        underCursor = 'border'
                    when underCursor is 'border' and not /\s/.test ch
                        underCursor = 'value'
                    when ch is ','
                        underCursor = 'key'
                        addPair()
                        skip = true

            pair[underCursor] += ch if underCursor isnt 'border' and not skip

        addPair() if pair.key or pair.value
        o