如何使用JavaScript分割这个字符串?

3

我有一个字符串

(<<b>>+<<10>>)*<<c>>-(<<x>>+<<y>>) 

使用JavaScript,将其解析为最快的方法是什么?
[b, 10, c, x, y]

原始字符串的结构总是相同的吗? - StackFlower
我建议阅读关于XY问题的内容。看起来你正在尝试编写一个解析引擎?也许如果你在这方面再详细一些,你可能会得到更多实际有用的答案,而不是直接解决你目前在问题中提出的子问题。 - Spudley
我可以问一下这个字符串是从哪里来的,尖括号的预期目的是什么? - David Thomas
4个回答

5

5

试试这个:

'(<<b>>+<<10>>)*<<c>>-(<<x>>+<<y>>)'.match(/[^(<+>)*-]+/g)

1
甚至可以使用 match(/[0-9a-z]+/g) - Benubird
我怎样理解match中的正则表达式?你能解释一下吗?只是问问而已。 - HIRA THAKUR
1
@MESSIAH:它匹配的是不是 (<+>)*- 的字符。 - CD..

3

使用正则表达式

var pattern=/[a-zA-Z0-9]+/g
your_string.match(pattern).

3
var str = '(<<b>>+<<10>>)*<<c>>-(<<x>>+<<y>>) ';
var arr = str.match(/<<(.*?)>>/g);
// arr will be ['<<b>>', '<<10>>', '<<c>>', '<<x>>', '<<y>>']

arr = arr.map(function (x) { return x.substring(2, x.length - 2); });
// arr will be ['b', '10', 'c', 'x', 'y']

您也可以使用exec直接获取捕获组:

var regex = /<<(.*?)>>/g;
var match;
while ((match = regex.exec(str))) {
    console.log(match[1]);
}

这个正则表达式的好处是你可以在字符串中使用任何字符,包括其他字母数字字符,而不会自动匹配它们。只有在<< >>中的标记才会被匹配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接