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