我有这根线
we have two papers // two handbags /// three bags //// four bottles
我希望它成为
we have two papers / two handbags / three bags / four bottles
我试过string.replace(///g, '/'),但它不工作它返回语法错误。
string.replace(///g, '/')
vktxenjb1#
答案是:
'one / two // three ///'.replace(/\/\/+/g, '/')
让我们一步一步来解释为什么它是正确的。第一,处理错误。是因为伤口没有逃脱。正则表达式以/开头,为了匹配所有出现的字符串以/g结尾,所以为了匹配所有两个斜杠,我们可以写:
/\/\//g
1.开始regex - /1.匹配一个斜杠- /1.匹配另一个斜杠- /1.所有事件- /g但是,给定上面的输入字符串,输出将是:
one / two / three //
这是因为///匹配两对斜线,对于每一对斜线,将其转换为一个斜线,仅此而已。正则表达式不是迭代的。所以我们要找的是匹配两个或更多的斜杠,这将给予我在开头写的答案。请注意,这也可以工作:
///
/\/+/g
然而,它的性能很差,因为它将匹配单个斜杠并将它们替换为相同的字符串。
dfty9e192#
您应该改为用途:
"some string".replace(/\/+/g, '/')
+表示匹配一个或多个。/用于以文字形式分隔正则表达式。所以你必须用反斜杠来转义它。
+
/
9wbgstp73#
您的代码不起作用,因为您需要转义斜杠并添加+,这意味着它匹配每一个斜杠数string.replace(/\/+/g, '\/')可以工作。
string.replace(/\/+/g, '\/')
eit6fx6z4#
let txtNew = txtOrig.replace(/\/{2,}/g, "/");
这意味着有两个或多个斜线//、///等。->单台/我更喜欢这种方式,因为其他方式可能会令人困惑。我不想让它看起来像我替换了一个斜杠,或者我只替换了双精度数,即使实际上这些方法按预期工作。
//
4条答案
按热度按时间vktxenjb1#
答案是:
让我们一步一步来解释为什么它是正确的。
第一,处理错误。是因为伤口没有逃脱。正则表达式以/开头,为了匹配所有出现的字符串以/g结尾,所以为了匹配所有两个斜杠,我们可以写:
1.开始regex - /
1.匹配一个斜杠- /
1.匹配另一个斜杠- /
1.所有事件- /g
但是,给定上面的输入字符串,输出将是:
这是因为
///
匹配两对斜线,对于每一对斜线,将其转换为一个斜线,仅此而已。正则表达式不是迭代的。所以我们要找的是匹配两个或更多的斜杠,这将给予我在开头写的答案。请注意,这也可以工作:
然而,它的性能很差,因为它将匹配单个斜杠并将它们替换为相同的字符串。
dfty9e192#
您应该改为用途:
+
表示匹配一个或多个。/
用于以文字形式分隔正则表达式。所以你必须用反斜杠来转义它。9wbgstp73#
您的代码不起作用,因为您需要转义斜杠并添加
+
,这意味着它匹配每一个斜杠数string.replace(/\/+/g, '\/')
可以工作。eit6fx6z4#
这意味着有两个或多个斜线
//
、///
等。->单台/
我更喜欢这种方式,因为其他方式可能会令人困惑。我不想让它看起来像我替换了一个斜杠,或者我只替换了双精度数,即使实际上这些方法按预期工作。