Javascript RegEx如何制作:“word1-word2”到“word1-word2”

时间:2011-11-14 16:35:26

标签: javascript regex

我有一个包含破折号的句子,周围没有空格。我想插入空格,但只有没有空格(我不想加倍空格)。

"word1—word2" to "word1 — word2"

......但不是:

"word1 — word2" to "word1  —  word2"

我想我可以点这个:

text.replace(/—/g, " — ").replace(/  —  /g, " — ");

...但我想知道是否有更简单的方法来实现目标。

4 个答案:

答案 0 :(得分:2)

text.replace(/([^ ])-([^ ])/g, "$1 - $2");

这应该可以解决问题。

答案 1 :(得分:1)

转义码\b是“字边界”的零宽度断言。通过匹配\b—\b,只有在每一方都有“单词”字符时才会匹配短划线。

text.replace(/\b—\b/g, " — ");

因为断言是零宽度,所以不需要包含组,这简化了正则表达式。

答案 2 :(得分:0)

text.replace(/(^|[^ ])-([^ ]|$)/g, "$1 - $2");

应该这样做。

....replace(/ — /g, " — ")无效,因为当"foo- bar"中的短划线一侧只有空格时,它会加倍空格。

答案 3 :(得分:0)

text = text.replace(/\s*—\s*/g, " — ");

鉴于已经格式良好的字符串,它将用一个空格替换一个空格,但这不会伤害任何东西。如果没有空格,太多或错误的类型,它将被标准化为一个空格。