Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.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_Jquery - Fatal编程技术网

尝试在JavaScript中修剪字符串的一部分

尝试在JavaScript中修剪字符串的一部分,javascript,jquery,Javascript,Jquery,我很难弄清楚如何在JavaScript中修剪字符串的一部分。我需要消除不一致,因为它们来自数据库。希望有人能帮我 在我的网页上,我出现了一些2汤匙(33克)和2汤匙(33克) 我需要让所有东西都像这样2汤匙(33g)。因此,基本上括号之间的任何内容都需要删除空白。如何使用JS实现这一点 这是我的代码:$(“.servingSize”).html(servingSize.replace(“,”); 这只会删除括号前的空白。不知道我做错了什么 使用replace方法,替换字符串中所有匹配项的唯一方

我很难弄清楚如何在JavaScript中修剪字符串的一部分。我需要消除不一致,因为它们来自数据库。希望有人能帮我

在我的网页上,我出现了一些2汤匙(33克)2汤匙(33克)

我需要让所有东西都像这样2汤匙(33g)。因此,基本上括号之间的任何内容都需要删除空白。如何使用JS实现这一点

这是我的代码:
$(“.servingSize”).html(servingSize.replace(“,”);


这只会删除括号前的空白。不知道我做错了什么

使用
replace
方法,替换字符串中所有匹配项的唯一方法是使用regex参数。正确的方法是
替换(/\s/g',)
\s
是正则表达式中与所有空白字符匹配的特殊参数


在您的情况下,仅替换括号内的字符,可以使用以下正则表达式:
servingSize.replace(/\s+(?=g)/g')
(?=g)
是一种正向前瞻,它只选择后面带有
g
字符的空白行。

使用
replace
方法,替换字符串中所有匹配项的唯一方法是使用regex参数。正确的方法是
替换(/\s/g',)
\s
是正则表达式中与所有空白字符匹配的特殊参数

在您的情况下,仅替换括号内的字符,可以使用以下正则表达式:
servingSize.replace(/\s+(?=g)/g')
(?=g)
是一个正向的前瞻,它只选择后面带有
g
字符的空白行。

使用$(“.servingSize”).html(servingSize.replace(“g”,“g”); 这将只替换grams之前的空格,而不是每个空格都使用$(“.servingSize”).html(servingSize.replace(“g”,“g”));
这将只替换grams之前的空格,而不是每个空格

另一种方法是替换模式:

servingSize.replace(/\((\s*)(\d+)(\s*)(\w+)(\s*)\)/g, '($2$4)');
假设模式始终是一个括号
后跟一个数字,后跟一个或多个字母,另一个括号
,我们可以匹配任何周围的空间,只是不将这些组包含在替换中。这也适用于任何其他单位

如果您正在搜索和替换整个HTML页面,为了安全起见,我会进一步将其锁定,使其更加具体:

servingSize.replace(/(\d+ (?:tbsp|tsp))\s\((\s*)(\d+)(\s*)(\w+)(\s*)\)/g, '$1 ($3$5)');
(不过,如果您使用jquery来匹配特定元素,那么第一个就可以了)

正则表达式中
之间的任何内容都标记一个组,可以使用
$
后跟组号的索引访问该组(0是整个正则表达式匹配字符串,1开始捕获的第一个组)。在
str.Replace({regex},s)
格式中,
s
字符串可以包含这些
${}
标记

注意:这将处理匹配项周围的任何空格:

2汤匙(33克)
=>
2汤匙(33克)


如果将来需要,甚至可以使用其他单位来代替“g”。

另一种方法是替换模式:

servingSize.replace(/\((\s*)(\d+)(\s*)(\w+)(\s*)\)/g, '($2$4)');
假设模式始终是一个括号
后跟一个数字,后跟一个或多个字母,另一个括号
,我们可以匹配任何周围的空间,只是不将这些组包含在替换中。这也适用于任何其他单位

如果您正在搜索和替换整个HTML页面,为了安全起见,我会进一步将其锁定,使其更加具体:

servingSize.replace(/(\d+ (?:tbsp|tsp))\s\((\s*)(\d+)(\s*)(\w+)(\s*)\)/g, '$1 ($3$5)');
(不过,如果您使用jquery来匹配特定元素,那么第一个就可以了)

正则表达式中
之间的任何内容都标记一个组,可以使用
$
后跟组号的索引访问该组(0是整个正则表达式匹配字符串,1开始捕获的第一个组)。在
str.Replace({regex},s)
格式中,
s
字符串可以包含这些
${}
标记

注意:这将处理匹配项周围的任何空格:

2汤匙(33克)
=>
2汤匙(33克)


如果将来需要,甚至可以使用其他单位来代替“g”。

furkle肯定得到了正确的答案,但我将发布一个替代解决方案,用于处理不知道括号内是什么单位的情况

var regexPattern= /^([^\(]*\([^ ]*)( )([^\)]*\).*)$/;

while (regexPattern.test(servingSize)) {
    servingSize = servingSize.replace(regexPattern, "$1$3");
}

$(".servingSize").html(servingSize);
模式分解如下:

/^
-从字符串开头开始

([^\([^]*\([^]*)
-捕获所有字符,直到开始括号、括号本身以及紧跟其后的任何非空格字符

()
-捕获括号内的第一个空格字符

([^\)]*\).
-捕获所有字符,直到右括号、括号本身以及其后的所有字符

$/
-一直到字符串末尾

通过使用
while
循环中的
.test()
方法对其进行检查,只要在括号内找到一个空格,它就会运行循环。如果它运行,它将用所有字符替换整个字符串,直到匹配的空格和它后面的所有字符

一旦循环找不到更多的空间,它就会退出并更新HTML

通过这种方式,代码适用于您可能使用的任何单元:

  • “2汤匙(33克)”==>“2汤匙(33克)”
  • “1小时(360秒)”==>“1小时(360秒)”
  • “1吨(2000磅)”==>“1吨(2000磅)”
此外,这甚至可以处理极端的例子,例如:

  • “2汤匙(33克)”==>“2汤匙(33克)”

    • furkle肯定得到了正确的答案,但我要发布一个alt