我有这个字符串:
"br#go.span, span, a.my_a, [class=my_a]"
和这个正则表达式:
/((\.|\#|\:|(\[[a-zA-Z=]+\]))+^[()]+|[A-Za-z]+)/g
我希望它返回一个这样的数组:
["br", "#go", ".span", "span", "a", ".my_a", "[class=my_a]"]
但我得到的数组是:
["br", "go", "span", "a", "my", "a", "class", "my", "a"]
我也尝试过:
/([A-Za-z]+|(\.|\#|\:|(\[[a-zA-Z=]+\])])+^(\.|\#|\:|(\[[a-zA-Z=]+\]))+)/ig
我从上到下搜索了互联网,并尝试了很多东西,比如删除一些零件并添加一些零件。它适用于JavaScript库。你能帮帮我吗?!谢谢!
我其实只是想把它拆分为:
'。','#',':'和' [ = ]' //注意:*匹配任何内容
答案 0 :(得分:1)
看起来您的正则表达式中存在错误,使其仅与[a-z]+
部分匹配:
/((\.|\#|\:|(\[[a-zA-Z=]+\]))+^[()]+|[A-Za-z]+)/g // ^^
这里的^
是string-begin anchor(在之后 <}>,而不是negating the character class。你可能想要
/((\.|\#|\:|(\[[a-zA-Z=]+\]))+[^()]+|[A-Za-z]+)/g
但我建议在该否定字符类中包含一些其他字符,例如空格,逗号和所有.#.[]
运算符。对于您的用例,以下正则表达式应该受到影响:
/[.#:]?[a-z_]+|\[[a-z_=]*\]/ig
嗯,你是故意使用那个锚吗?你觉得它做什么?我也尝试过:
/([A-Za-z]+|(\.|\#|\:|(\[[a-zA-Z=]+\])])+^(\.|\#|\:|(\[[a-zA-Z=]+\]))+)/ig // ^
我其实只是想把它拆分为&#39;&#39;,&#39;#&#39;,&#39;:&#39;和&#39; [=]&#39;
我不认为你想要split字符串。而是尝试match您感兴趣的字符串。
var str = "br#go.span, span, a.my_a, [class=my_a]"
str.split(/,?\s|(?=:|#|\[|\.)/g) // (using lookahead) or
str.match(/[.#:]?[a-z_]+|\[[a-z_=]*\]/ig) // will both have the desired result
// but will deal differently with invalid strings
// and have different readability/maintainability
答案 1 :(得分:1)
试试这个。
"br#go.span, span, a.my_a, [class=my_a]".match(/(\[[\w\W]+\])|(\w+)|(\W[\w]+)/g)
["br", "#go", ".span", " span", " a", ".my_a", "[class=my_a]"]
对于您的更新查询
&#34;我实际上只想把它拆分为:&#34;
&#39;。&#39;,&#39;#&#39;,&#39;:&#39;和&#39; [=]&#39; //注意:*匹配任何内容
试试这个:
"br#go.span, span, a.my_a, ab:c, [class=my_a]".match(/(\[[\w\W]+\])|(\.[\w]+)|(#[\w]+)|(\:[\w]+)|([\w]+)/g)
["br", "#go", ".span", "span", "a", ".my_a", "ab", ":c", "[class=my_a]"]