我正在为字符串而苦苦挣扎:
"some text [2string] some another[test] and another [4]";
试图在 [] 中引用除数字之外的每个值,因此可以将其转换为
"some text ['2string'] some another['test'] and another [4]"
谢谢。
我正在为字符串而苦苦挣扎:
"some text [2string] some another[test] and another [4]";
试图在 [] 中引用除数字之外的每个值,因此可以将其转换为
"some text ['2string'] some another['test'] and another [4]"
谢谢。
你需要一个正则表达式
[]
,即 a [
,任意数量的字符,除了]
,然后是 a]
result = subject.replace(/\[(?!\d+\])([^\]]*)\]/g, "['$1']");
解释:
\[ # Match [
(?! # Assert that it's impossible to match...
\d+ # one or more digits
\] # followed by ]
) # End of lookahead assertion
( # Match and capture in group number 1:
[^\]]* # any number of characters except ]
) # End of capturing group
\] # Match ]
我会尝试类似的东西\[(\d*?[a-z]\w*?)]
。[...]
只要里面至少有一个字母,这应该匹配任何。如果下划线 ( _
) 无效,请将\w
末尾的替换为[a-z]
.
\[
只是一个简单的匹配[
,由于 的特殊含义,它必须被转义[
。\d*?
将匹配任意数量的数字(或不匹配),但尽可能少以完成匹配。[a-z]
将匹配给定范围内的任何字符。\w*?
将匹配任何“单词”(字母数字)字符(字母、数字和下划线),再次尽可能少地完成匹配。]
是另一个简单的匹配,这个不必被转义,因为它不会误导([
在这个级别没有打开)。它可以被转义,但这通常是一种风格偏好(取决于实际的正则表达式引擎)。如果性能不是一个大问题,则更长但 IMO 更清洁的方法:
var string = "some text [2string] some another[test] and another [4]";
var output = string.replace(/(\[)(.*?)(\])/g, function(match, a, b, c) {
if(/^\d+$/.test(b)) {
return match;
} else {
return a + "'" + b + "'" + c;
}
});
console.log(output);
你基本上匹配方括号内的每个表达式,然后测试它是否是一个数字。如果是,则按原样返回字符串,否则在特定位置插入引号。
输出:
some text ['2string'] some another['test'] and another [4]
你可以用这个正则表达式替换它
input.replace(/(?!\d+\])(\w+)(?=\])/g, "'$1'");
另一种为您的尝试添加简单正则表达式的解决方案:
str.split('[').join("['").split(']').join("']").replace(/\['(\d+)'\]/, "[$1]");