用_(下划线)替换一个数字(不在字符前面)

时间:2011-08-09 06:04:03

标签: javascript asp.net

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

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

提前致谢。

3 个答案:

答案 0 :(得分:2)

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

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_$2'是输出格式。

因此,表达式转换为:

  

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

修改

顺便说一句,当我读到这个问题时,我认为JS功能是理想的答案。如果不是这种情况,请阅读rkw的{​​{3}},因为它提供了C#版本。

编辑2

巴特提出了一个很好的观点,即在字符串以数字开头的情况下,上述情况会失败。其他语言可以用负面的后观来解决这个问题,但JavaScript不能(它不支持负面的外观)。因此,必须使用替代函数(对substr(0,1)的NaN测试似乎是最简单的方法):

var str = '(a/(b1/8))*100';
var fin = str.replace(/([^a-zA-Z0-9])([0-9])/g, '$1_$2');
if( !isNaN( fin.substr( 0, 1 ) ) ) fin = "_" + fin;
alert( fin );

答案 1 :(得分:1)

与cwallenpoole相同,只是在C#代码背后 <击>

<击>
string str = '(a/(b1/8))*100';
str = Regex.Replace(str, '([^a-zA-Z])([0-9])', '$1_$2');

<击>

<强>更新

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

答案 2 :(得分:0)

为什么不试试正则表达式: 那就是:

搜索正则表达式:“[0-9] +”&amp;替换为“_ + regex。”

String RegExPattern = @"[0-9]+";
String str = "(a/(b1/8))*100";
Regex.Replace(str, RegExPattern, "_$1");

来源:http://msdn.microsoft.com/en-us/library/ms972966.aspx

希望有所帮助!