使用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中没有所需的负面信息。任何帮助表示赞赏!
我一直在使用的示例字符串:
'////'
答案 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)
如果要使用正则表达式,可以使用:
(^|[^\/])(\/)(?=(?:\/\/)*(?!\/))
说明
(^|[^\/])
第一个捕获组来声明行的开头或不匹配正斜杠(\/)
第二个捕获组匹配一个正斜杠(?=
积极前瞻
(?:\/\/)*
重复零次或多次//
(?!\/)
负向断言,断言其后跟不是正斜杠)
积极回望替换为两个捕获组,后跟一个正斜杠
$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/"))
});