我正在努力使用字符串:
"some text [2string] some another[test] and another [4]";
尝试引用[]中的每个值但数字,因此可以将其转换为
"some text ['2string'] some another['test'] and another [4]"
感谢。
答案 0 :(得分:4)
你需要一个正则表达式
[]
之间的内容,i。即一个[
,除]
以外的任意数量的字符,然后是]
您可以使用character classes和negative lookahead assertions解决此问题:
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 ]
答案 1 :(得分:0)
我会尝试\[(\d*?[a-z]\w*?)]
之类的东西。只要内部至少有一个字母,这应匹配任何[...]
。如果下划线(_
)无效,请将最后的\w
替换为[a-z]
。
\[
只是[
的简单匹配,由于[
的特殊含义,必须对其进行转义。\d*?
会匹配任意数量的数字(或没有数字),但会尽可能少地完成匹配。[a-z]
将匹配给定范围内的任何字符。\w*?
将匹配任何“字”(字母数字)字符(字母,数字和下划线),再次尽可能少地完成匹配。]
是另一个简单的匹配,这个不必被转义,因为它没有误导性(在此级别没有打开[
)。它可以被转义,但这通常是一种样式首选项(取决于实际的正则表达式引擎)。答案 2 :(得分:0)
如果性能不是一个大问题,那么更长但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]
答案 3 :(得分:0)
您可以使用此正则表达式替换它
input.replace(/(?!\d+\])(\w+)(?=\])/g, "'$1'");
答案 4 :(得分:0)
另一种为您的尝试添加简单正则表达式的解决方案:
str.split('[').join("['").split(']').join("']").replace(/\['(\d+)'\]/, "[$1]");