0

我在使用 Javascript 构建一些正则表达式时遇到了困难。

我需要的:

我有一个字符串,如:Woman|{Man|Boy}{Girl|Woman}|ManWoman|Man等。我需要用“|”分割这个字符串 分隔符,但我不希望它在大括号内被分割。

字符串和所需结果的示例:

// Expample 1
string: 'Woman|{Man|Boy}'
result: [0] = 'Woman', [1] = '{Man|Boy}'

// Example 2
string '{Woman|Girl}|{Man|Boy}'
result: [0] = '{Woman|Girl}', [1] = '{Man|Boy}'

我不能改变“|” 符号到括号内的另一个,因为给定的字符串是递归函数的结果。例如,原始字符串可能是

'自然|电脑|{{女孩|女人}|{男孩|男人}}'

4

3 回答 3

3

尝试这个:

var reg=/\|(?![^{}]+})/g;

示例结果:

var a = 'Woman|{Man|Boy}';
var b = '{Woman|Girl}|{Man|Boy}';

a.split(reg)
["Woman", "{Man|Boy}"]

b.split(reg)
["{Woman|Girl}", "{Man|Boy}"]

对于您的另一个问题:

"Now I have another, but a bit similar problem. I need to parse all containers from the string. Syntax of the each container is {sometrash}. The problem is that container can contain another containers, but I need to parse only "the most relative" container. mystring.match(/\{+.+?\}+/gi); which I use doesn't work correctly. Could you correct this regex, please? "

你可以使用这个正则表达式:

var reg=/\{[^{}]+\}/g;

示例结果:

    var a = 'Nature|Computers|{{Girls|Women}|{Boys|Men}}';

    a.match(reg)
    ["{Girls|Women}", "{Boys|Men}"]
于 2013-07-02T16:10:24.243 回答
0

您可以使用

.match(/[^|]+|\{[^}]*\}/g)

匹配那些。但是,如果您有任意深度的嵌套,那么您将需要使用解析器,[javascript] 正则表达式将无法做到这一点。

于 2013-07-02T17:04:18.880 回答
-2

测试这个:

([a-zA-Z0-9]*\|[a-zA-Z0-9]*)|{[a-zA-Z0-9]*\|[a-zA-Z0-9]*}
于 2013-07-02T16:17:20.430 回答