替换后面没有相同字符的字符

时间:2018-10-05 09:56:36

标签: javascript node.js regex

使用JavaScript替换不跟在同一字符之后的字符。

我有一个字符串,其中的字符串可能包含正斜杠(/)。 如果字符串包含单个正斜杠,那么我需要将其替换为两个'/',以使其转义。

例如const source = this.httpClient.get<any>('http://api.example.com', { params: params, responseType : 'json' }, ).subscribe(); source.pipe( //How can i skip the last response which has been requested first? ) 必须成为'sample/word'

另一个规则是,斜杠的奇数需要变为偶数。

例如'sample//word' => '///'

我已经研究过使用正则表达式,但是据我所知,JavaScript ES6中没有所需的负面信息。任何帮助表示赞赏!

我一直在使用的示例字符串:

'////'

4 个答案:

答案 0 :(得分:1)

使用上面的规则,您可以使用以下函数来满足它们并实现输出。在这里,我将一个函数传递到replace函数中,该函数使您可以检查正则表达式是否匹配/的奇数或偶数,并因此进行替换:

let strs = [
  'sample/single',
  'sample//double',
  'sample',
  '//',
  '/',
  '//sample',
  'sample//',
  '/sample',
  'sample/',
  'sample///',
  '///sample',
  '////sample',
  '/////sample',
  'sample/////',
  'sample////',
  'sample / again',
  'sa/mple agai/n'
];

let result = 
strs.map(elem => elem.replace(/\/+/g, match => match.length % 2 != 0 ? match+'/':match));

console.log(result);

答案 1 :(得分:0)

仅当行中的/个字符作为计算总数/文本时,这对您的数据集有效(最后一个除外),这才有用。

var newstr = str;
if( str.match(/([/])/g).length % 2 == 1 )
   newstr = str.replace(/([/])/g, "$1$1");

答案 2 :(得分:0)

尝试一下:

let strs = [
  'sample/single',
  'sample//double',
  'sample',
  '//',
  '/',
  '//sample',
  'sample//',
  '/sample',
  'sample/',
  'sample///',
  '///sample',
  '////sample',
  '/////sample',
  'sample/////',
  'sample////',
  'sample / again',
  'sa/mple agai/n'
];

const slashMeUpBro = (word) => {
    let words = word.split('//');
    word.split('//').forEach((word, index) => words[index] = word.replace(/\/+/g, '//'));
    return words.join('//');
}

strs.forEach(word => console.log(slashMeUpBro(word)));

答案 3 :(得分:0)

如果要使用正则表达式,可以使用:

(^|[^\/])(\/)(?=(?:\/\/)*(?!\/))

Regex demo

说明

  • (^|[^\/])第一个捕获组来声明行的开头或不匹配正斜杠
  • (\/)第二个捕获组匹配一个正斜杠
  • (?=积极前瞻
    • (?:\/\/)*重复零次或多次//
    • (?!\/)负向断言,断言其后跟不是正斜杠
  • )积极回望

替换为两个捕获组,后跟一个正斜杠

$1$2/

let pattern = /(^|[^\/])(\/)(?=(?:\/\/)*(?!\/))/g;
let strs = [
  '//\n/',
  'sample/single',
  'sample//double',
  'sample',
  '//',
  '/',
  '//sample',
  'sample//',
  '/sample',
  'sample/',
  'sample///',
  '///sample',
  '////sample',
  '/////sample',
  'sample/////',
  'sample////',
  'sample / again',
  'sa/mple agai/n'
];

strs.forEach((s) => {
  console.log(s.replace(pattern, "$1$2/"))
});