Javascript 将数字(前面不带字符)替换为(下划线)

Javascript 将数字(前面不带字符)替换为(下划线),javascript,asp.net,Javascript,Asp.net,我想用_number替换字符串中的数字。我们必须只提取不以字符开头的数字,并用下划线替换它们。 要求:我有一个字符串,所以在处理时我想用_常量替换常量。 示例字符串:“(a/(b1/8))*100” 预期产出:“(a/(b1/8))*100” 请建议如何在asp.net代码中执行此操作 提前感谢。您需要一个正则表达式和替换函数: var str = '(a/(b1/8))*100'; alert( str.replace(/([^a-zA-Z0-9])([0-9])/g, '$1_$2') );

我想用_number替换字符串中的数字。我们必须只提取不以字符开头的数字,并用下划线替换它们。 要求:我有一个字符串,所以在处理时我想用_常量替换常量。 示例字符串:“(a/(b1/8))*100” 预期产出:“(a/(b1/8))*100”

请建议如何在asp.net代码中执行此操作


提前感谢。

您需要一个正则表达式和替换函数:

var str = '(a/(b1/8))*100';
alert( str.replace(/([^a-zA-Z0-9])([0-9])/g, '$1_$2') );
那么,发生了什么事

  • /
    标记正则表达式(最适合此任务的工具)的开始和结束
  • [^a-zA-Z0-9]
    表示“没有字母或数字”
  • [0-9]
    表示“数字”
  • 它们合在一起的意思是,“不是字母或数字后跟数字的东西”
  • 结尾的g表示“找到所有的”
  • ()
    将正则表达式分为$1和$2两部分
  • “$1\u$2”
    是输出格式
因此,表达式转换为:

查找数字跟在非字母数字后面的所有情况。在数字和非字母数字之间放置一个“\”。返回结果

编辑 另外,当我读到这个问题时,我认为JS函数是理想的答案。如果不是这样的话,请阅读提供C版本的《rkw编码》

编辑2 Bart提出了一个很好的观点,即当字符串以数字开头时,上述操作将失败。其他语言可以通过负lookbehind解决这个问题,但JavaScript不能(它不支持负lookbehind)。因此,必须使用另一个函数(substr(0,1)上的NaN测试似乎是最简单的方法):


您需要一个正则表达式和replace函数:

var str = '(a/(b1/8))*100';
alert( str.replace(/([^a-zA-Z0-9])([0-9])/g, '$1_$2') );
那么,发生了什么事

  • /
    标记正则表达式(最适合此任务的工具)的开始和结束
  • [^a-zA-Z0-9]
    表示“没有字母或数字”
  • [0-9]
    表示“数字”
  • 它们合在一起的意思是,“不是字母或数字后跟数字的东西”
  • 结尾的g表示“找到所有的”
  • ()
    将正则表达式分为$1和$2两部分
  • “$1\u$2”
    是输出格式
因此,表达式转换为:

查找数字跟在非字母数字后面的所有情况。在数字和非字母数字之间放置一个“\”。返回结果

编辑 另外,当我读到这个问题时,我认为JS函数是理想的答案。如果不是这样的话,请阅读提供C版本的《rkw编码》

编辑2 Bart提出了一个很好的观点,即当字符串以数字开头时,上述操作将失败。其他语言可以通过负lookbehind解决这个问题,但JavaScript不能(它不支持负lookbehind)。因此,必须使用另一个函数(substr(0,1)上的NaN测试似乎是最简单的方法):


与cWallenpole的相同,只是在C#代码隐藏中

已更新

string str = "(a/(b1/8))*100";
str = Regex.Replace(str, "([^a-zA-Z0-9]|^)([0-9])", "$1_$2");

与cWallenpole的相同,只是在C#代码隐藏中

已更新

string str = "(a/(b1/8))*100";
str = Regex.Replace(str, "([^a-zA-Z0-9]|^)([0-9])", "$1_$2");

为什么不试试正则表达式: 即:

搜索正则表达式:“[0-9]+”&替换为“u+正则表达式”

资料来源:


希望这对你有所帮助

为什么不试试正则表达式: 即:

搜索正则表达式:“[0-9]+”&替换为“u+正则表达式”

资料来源:


希望这对你有所帮助

所以代码将在C#或VB.net中,所以它可以用作JavaScript标识符,对吗?这两个中的哪一个?那么代码将在C#或VB.net中,因此它可以用作JavaScript标识符,对吗?这两个选项中的哪一个?你忘记了限制“仅限不以字符开头的数字”(他可能指的是“单词字符”或非标点符号之类)。你忘记了限制“仅限不以字符开头的数字”(他可能指的是“单词字符”),或非标点符号,诸如此类)。如果他的字符串以数字开头,这将崩溃。您仍然可以使用负回溯,或者,如果字符类适合的话,可以使用单词边界。或者,在第一部分中使用另一个选项,即
^
,这是一个点,但JS不支持负回溯。当然,也有。如果字符串以数字开头,这将崩溃。您仍然可以使用负回溯,或者,如果字符类适合,可以使用单词边界。或者,对于第一部分,使用一个替代选项,使用
^
,这是一个点,但JS不支持负回溯。当然,有。这会提供部分输出。这会提供部分输出:(a/(b1/(u 8))*(a/b1/(u 8))10\u 0预期为(a/b1/(u 8))*_100@cwallenpoole您能告诉我为什么3位数的数字,即100被一分为二吗。这不是你想要的。还有其他编辑吗?@cwallenpole非常感谢。这就像一个符咒:)…非常感谢。这是部分输出。这是部分输出:(a/(b1/_8))*_10_0预期是(a/b1/_8))*_100@cwallenpoole您能告诉我为什么3位数的数字,即100被一分为二吗。这不是我想要的。还有其他编辑吗?@cWallenpole非常感谢。这就像一个符咒:)…非常感谢。
String RegExPattern = @"[0-9]+";
String str = "(a/(b1/8))*100";
Regex.Replace(str, RegExPattern, "_$1");