regex 使用JavaScript将文本中的多个斜杠替换为单个斜杠

2q5ifsrm  于 2023-06-25  发布在  Java
关注(0)|答案(4)|浏览(205)

我有这根线

we have two papers // two handbags /// three bags //// four bottles

我希望它成为

we have two papers / two handbags / three bags / four bottles

我试过string.replace(///g, '/'),但它不工作
它返回语法错误。

vktxenjb

vktxenjb1#

答案是:

'one / two // three ///'.replace(/\/\/+/g, '/')

让我们一步一步来解释为什么它是正确的。
第一,处理错误。是因为伤口没有逃脱。正则表达式以/开头,为了匹配所有出现的字符串以/g结尾,所以为了匹配所有两个斜杠,我们可以写:

/\/\//g

1.开始regex - /
1.匹配一个斜杠- /
1.匹配另一个斜杠- /
1.所有事件- /g
但是,给定上面的输入字符串,输出将是:

one / two / three //

这是因为///匹配两对斜线,对于每一对斜线,将其转换为一个斜线,仅此而已。正则表达式不是迭代的。所以我们要找的是匹配两个或更多的斜杠,这将给予我在开头写的答案。
请注意,这也可以工作:

/\/+/g

然而,它的性能很差,因为它将匹配单个斜杠并将它们替换为相同的字符串。

dfty9e19

dfty9e192#

您应该改为用途:

"some string".replace(/\/+/g, '/')

+表示匹配一个或多个。/用于以文字形式分隔正则表达式。所以你必须用反斜杠来转义它。

9wbgstp7

9wbgstp73#

您的代码不起作用,因为您需要转义斜杠并添加+,这意味着它匹配每一个斜杠数
string.replace(/\/+/g, '\/')可以工作。

eit6fx6z

eit6fx6z4#

let txtNew = txtOrig.replace(/\/{2,}/g, "/");

这意味着有两个或多个斜线/////等。->单台/
我更喜欢这种方式,因为其他方式可能会令人困惑。我不想让它看起来像我替换了一个斜杠,或者我只替换了双精度数,即使实际上这些方法按预期工作。

相关问题