Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除相邻出现多次的字符串-javascript或jquery_Javascript_Jquery_String_Replace - Fatal编程技术网

删除相邻出现多次的字符串-javascript或jquery

删除相邻出现多次的字符串-javascript或jquery,javascript,jquery,string,replace,Javascript,Jquery,String,Replace,我有一根这样的线: var main_str = 'Hi I have |str| way |str||str| too |str||str||str| many breaks'; 我需要删除出现在另一个|str |旁边的任何| str | 通缉结果: var main_str = 'Hi I have |str| way |str| too |str| many breaks |str|'; 换句话说,如果有许多| str |紧挨在一起,我们将除去一个以外的所有元素。另一种简单的方法是.s

我有一根这样的线:

var main_str = 'Hi I have |str| way |str||str| too |str||str||str| many breaks';
我需要删除出现在另一个
|str |
旁边的任何
| str |

通缉结果:

var main_str = 'Hi I have |str| way |str| too |str| many breaks |str|';

换句话说,如果有许多
| str |
紧挨在一起,我们将除去一个以外的所有元素。

另一种简单的方法是
.split()
根据您计划使用的任何分隔符对字符串进行分割,
对非空元素进行筛选()
,然后使用相同的分隔符进行
.join()

var main_str = 'Hi I have |str| way |str||str| too |str||str||str| many breaks';
main_str = main_str.replace(/(\|str\|){2,}/g, '|str|');

console.log(main_str);
JavaScript

var str = "Hi I have |str| way |str||str| too |str||str||str| many breaks";

var x = str.split("|str|").filter(function (d){
    return d.length;
}).join("|str|");

console.log(x)
// returns "Hi I have |str| way |str| too |str| many breaks |str|";
这样可以避免为每种情况生成特定的正则表达式,而不使用转义字符,而是通过
.split()
.join()
运行变量

不确定此解决方案是否有效。在非Chrome浏览器中,它似乎更快。我猜想Chrome是高效的,因为v8引擎,在运行它一百万次之前编译一个正则表达式,使正则表达式解决方案更快


另一种简单的方法是基于您计划使用的任何分隔符
.split()
字符串,对于非空元素
.filter()
,然后使用相同的分隔符
.join()

JavaScript

var str = "Hi I have |str| way |str||str| too |str||str||str| many breaks";

var x = str.split("|str|").filter(function (d){
    return d.length;
}).join("|str|");

console.log(x)
// returns "Hi I have |str| way |str| too |str| many breaks |str|";
这样可以避免为每种情况生成特定的正则表达式,而不使用转义字符,而是通过
.split()
.join()
运行变量

不确定此解决方案是否有效。在非Chrome浏览器中,它似乎更快。我猜想Chrome是高效的,因为v8引擎,在运行它一百万次之前编译一个正则表达式,使正则表达式解决方案更快


你的回答也很好:)但我想另一个是easier@user3425760这个解决方案虽然稍显冗长,但速度更快。要慢多少?在我的机器上,超过100万次迭代需要1200毫秒。另一个需要700毫秒。@SeanBright我做了一个测试。如果您事先编译一个正则表达式并重用它,您的可能会更快(但您在回答中没有这样做)。不过,您的浏览器可能正在对其进行优化。看来是Safari造成的,而不是regex。请你更新你的回答中的陈述以反映这一事实好吗?谢谢你。你的回答也很好:)但我想另一个是easier@user3425760这个解决方案虽然稍显冗长,但速度更快。要慢多少?在我的机器上,超过100万次迭代需要1200毫秒。另一个需要700毫秒。@SeanBright我做了一个测试。如果您事先编译一个正则表达式并重用它,您的可能会更快(但您在回答中没有这样做)。不过,您的浏览器可能正在对其进行优化。看来是Safari造成的,而不是regex。请你更新你的回答中的陈述以反映这一事实好吗?非常感谢。