Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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替换,直到没有更改为止?_Javascript - Fatal编程技术网

重复javascript替换,直到没有更改为止?

重复javascript替换,直到没有更改为止?,javascript,Javascript,我有一个简短但复杂的正则表达式来修剪空格,而不考虑字符串中存在的html标记 var text=“示例”; //从头修剪;在本例中不相关 text=text.replace(/^((]*>)*)\s+/g,“$1”); //从末端修剪 text=text.replace(/\s+(]*>)*)$/g,“$1”); console.log(文本)您需要为标记添加一些含义,有些需要空格,有些则不需要 试试这个: text.replace(/\s*(<\/?(span|div)>)\s*

我有一个简短但复杂的正则表达式来修剪空格,而不考虑字符串中存在的html标记

var text=“示例”;
//从头修剪;在本例中不相关
text=text.replace(/^((]*>)*)\s+/g,“$1”);
//从末端修剪
text=text.replace(/\s+(]*>)*)$/g,“$1”);

console.log(文本)您需要为标记添加一些含义,有些需要空格,有些则不需要

试试这个:

text.replace(/\s*(<\/?(span|div)>)\s*/g, "$1")
    .trim()
    .replace(/\s+/g, ' ');
第一个答案,在评论之前。 这样做的目的是删除以下内容之间的所有空格:

  • 非空格字符和开头标记
  • 结束标记和非空格字符
text.replace(/([^\s])\s*(])\s*([^\s])/g,“$1$2”)
.trim();

序言:不要只是抄袭,要读到最后。
从另一个角度考虑——通过替换直到没有找到匹配项,而不是直到没有进行更改,这似乎非常简单

var text=“示例”;
var trim_start=/^((]*>)*)\s+/;
while(text.match(trim_start)){
text=text.replace(修剪开始,“$1”);
}
var trim_end=/\s+(]*>)*)$/;
while(text.match(trim_end)){
text=text.replace(修剪结束,“$1”);
}

console.log(文本)我真的很喜欢它的发展方向。它唯一做不到的就是在第一个标记之前和最后一个标记之后修剪空格。。。这是常规的
.trim()
所能做到的,因此这种组合非常有效!不过,它仍然喜欢删除在非常特殊的情况下不应该删除的空格。这里有一个:
示例案例
。不应删除
sample
case
之间的空格。请编辑答案。这不在您的示例中;)(很抱歉在你的评论之前跳过我的评论,它刚刚发生)我想指出,我的任何目标都不只是一个例子。我想a)从包含标记的字符串的开头和结尾修剪空格b)找出问题中的代码不起作用的原因。你的问题并不是那么简单。在此字符串中:
“示例”
如果删除
之间的空格,而不是
之间的空格,您如何计算?
g
标志使它在找到第一个匹配后继续查找进一步的匹配,但这并不一定等同于执行两次替换。我最终决定,原来有缺陷的解决方案适用于我的案例。这是一个不太可能的情况,有一个简单的修复方法——只需重复运行此代码的操作(保存)。多亏了@04FS,我想我现在明白了为什么它有缺陷了。所有匹配都发生在任何替换之前。此外,似乎在其他匹配中不存在匹配。
var text = "<div> <i>ano</i>   <b>ther</b>  <span> <b>my</b>   <i>ex</i> <u> ample </u> </span> </div>";
text.replace(/([^\s])\s*(<)/g, "$1$2")
    .replace(/([>])\s*([^\s])/g, "$1$2")
    .trim();