无法让RegExp在JavaScript中运行

时间:2014-06-09 16:22:53

标签: javascript regex

我有这个字符串:

"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库。你能帮帮我吗?!谢谢!

我其实只是想把它拆分为:

  

'。','#',':'和' [ = ]' //注意:*匹配任何内容

2 个答案:

答案 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]"]