我有一个包含破折号的句子,周围没有空格。我想插入空格,但只有没有空格(我不想加倍空格)。
"word1—word2" to "word1 — word2"
......但不是:
"word1 — word2" to "word1 — word2"
我想我可以点这个:
text.replace(/—/g, " — ").replace(/ — /g, " — ");
...但我想知道是否有更简单的方法来实现目标。
答案 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, " — ");
鉴于已经格式良好的字符串,它将用一个空格替换一个空格,但这不会伤害任何东西。如果没有空格,太多或错误的类型,它将被标准化为一个空格。