在Swift中解析文件的字符串之间的所有字符串

时间:2015-04-07 19:00:53

标签: javascript regex macos swift nsscanner

我想为我的javascript(pebble.js)应用程序构建一个本地化应用程序。它应该找到l._("")')",',之间的所有字符串。

所以例如我有一行

console.log(l._("This is a Test") + l._('%@ times %@ equals %@', 2, 4, (2*4)));

使用Swift应用程序,我应该得到一个像这样的数组:

["This is a Test", "%@ times %@ equals %@"]

现在我不知道应该如何管理它。我应该使用正则表达式,NSScanner还是应该拆分字符串?

谢谢!

1 个答案:

答案 0 :(得分:0)

我不熟悉NSScanner,但是使用regexp解决方案非常简单,假设一个字符串在两端都有相同的分隔符。 (即,你没有像l._("Hello world')这样的东西。)我认为这不是JavaScript中的有效语法,所以让我们假设是这种情况。 另外,我们假设字符串不包含任何转义引号(与分隔符相同的类型),即没有这样的字符串:l._("Hello \" world)

现在,您可以使用以下两个正则表达式来查找由双引号分隔的字符串以及用单引号分隔的字符串:

l._\("((?:[^"])*)" - 双引号 l._\('((?:[^'])*)' - 单引号

然后,您必须在输入上运行这两个正则表达式,并获得每个匹配的第一个捕获组的结果。 (我不确定swift如何使用正则表达式,但请注意,在许多实现中,捕获组#0通常是整个匹配,捕获组#1是位于第一对括号之间的 - 您需要后者。)

另外,请注意,您不必关心结束语后的内容:无论是括号还是逗号,对您来说都是一样的,因为您只需要看看报价。

编辑:更正了正则表达式(重复应该在捕获组内)。

EDIT2:如果我们允许转义引号,那么您可以将此正则表达式用于单引号: l._\('((?:\\'|[^'])*)'。和一个类似的双引号。 你可以在这个链接上玩正则表达式: https://regex101.com/r/tY1jB5/1