Javascript正则表达式:仅替换字符之间的连字符(不是空格)

时间:2018-05-28 10:00:48

标签: javascript regex

我想替换字符串中2个字符之间的连字符。这2个字符可以是任何,但只是空格。

string.replace(/regex/g, '');

所以

  • dog-cat:dogcat
  • dog - cat:不变
  • 1-1:11
  • 1 - 1:不变
  • $ - $:$$
  • $ - $:不变
  • ^ - ^:^^
  • ^ - ^:不变
  • 等...

3 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式替换:

str = str.replace(/(\S)-(\S)/g, '$1$2'); 

RegEx Demo

此处(\S)-(\S)匹配非空格字符,后跟连字符,后跟另一个非空格字符。我们还捕获组中的两个相邻字符,然后在替换时我们放回$1$2

const regex = /(\S)-(\S)/g;
const str = `dog-cat
dog - cat
1-1
1 - 1
$-$
$ - $
^-^
^ - ^`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, '$1$2');

console.log(result);

答案 1 :(得分:0)

试试这个正则表达式:"dog-cat".replace(/(?=\S)(-)(?=\S)/g, '')

答案 2 :(得分:0)

要删除非空白字符之间的所有-个字符,您应该使用

.replace(/(\S)-(?=\S)/g, '$1')

请参阅regex demo

下面,

  • (\S) - 匹配并将任何非空白字符捕获到第1组
  • - - 连字符
  • (?=\S) - (一个确定的正面预测)在连字符之后,必须有一个除空格之外的字符。不消耗此char,即正则表达式索引保持在它之前,允许将该char与下一次迭代匹配(因为g全局修饰符将允许匹配字符串中所有出现的正则表达式模式)。

JS演示:



var rx = /(\S)-(?=\S)/g;
var s = "dog-cat\ndog - cat\n1-1\n1 - 1\n$-$\n$ - $\n^-^\n^ - ^\n1-1-1-1";
console.log(s.replace(rx, '$1'));