这是输入:
[ 'markdown',
[ 'para', '"a paragraph"' ],
[ 'hr' ],
[ 'para', '\'another paragraph\'' ],
[ 'bulletlist', [ 'listitem', '"a list item"' ] ] ]
以下代码循环遍历数组的每个元素。如果元素是另一个数组,则代码会进一步深入并应用replace
,如果不是,则立即应用replace
(如果我没有使用if replace
语句 for (i = 1; i < tree.length; i++) {
var node = tree[i]
var x = node.length - 1
var y = node[x].length - 1
if (Array.isArray(node[x])) {
node[x] = node[x][y].replace(/"(?=\b)/g, '“')
.replace(/"(?!\b)/g, "”")
} else {
node[x] = node[x].replace(/"(?=\b)/g, '“')
.replace(/"(?!\b)/g, "”")
}
}
数组会导致错误。
replace
困扰我的是与.replace(/"(?=\b)/g, '“').replace(/"(?!\b)/g, "”")
的重复。如何修改代码,以便我只执行{{1}}一次?
答案 0 :(得分:2)
在函数中提取逻辑:
function replaceMe(element) {
return element.replace(/"(?=\b)/g, '“')
.replace(/"(?!\b)/g, "”");
}
...
for (i = 1; i < tree.length; i++) {
var node = tree[i]
var x = node.length - 1
var y = node[x].length - 1
if (Array.isArray(node[x])) {
node[x] = replaceMe(node[x][y]);
} else {
node[x] = replaceMe(node[x]);
}
}
...
答案 1 :(得分:2)
使用迭代,对N维数组有效
function doWork(tree){
for (i = 1; i < tree.length; i++) {
var node = tree[i]
var x = node.length - 1
var y = node[x].length - 1
if (Array.isArray(node[x])) {
doWork(node[x]);
} else {
node[x] = node[x].replace(/"(?=\b)/g, '“')
.replace(/"(?!\b)/g, "”")
}
}
}
// use it
doWork(tree);
答案 2 :(得分:1)
有时候两个简单的正则表达式比一个复合体更快。
但你可以尝试这样的不同方法:
var example_string = '"some_string"',
regex = /"(.*?)"/g;
var result = example_string.replace(regex, "“$1”");
console.log(result); // “some_string”
```