繁体   English   中英

js正则表达式逃避报价

[英]js regex escaping quotes

我想要转义仅在文本H1:之后出现的所有引号H1:

例如, :

H1: "text here"

应成为:

H1: "text here"

这看起来很简单,但这不是JS。

我试过的东西:

.replace(/H1:(.*)(")(.*)/ig, "H1:$1"$2")

它也应该适用于其他类似的文字,如:

H1: ""text here""
H1: "text "here""
H1: ""text here"

这是一种方法:

function encodeQuotesOccuringAfter(string, substring) {
    if(string.indexOf(substring) == -1) {
        return string;
    }

    var all = string.split(substring);
    var encoded = [all.shift(), all.join(substring).replace(/"/g, """)];

    return encoded.join(substring)
}

第二个有点浪费,但你可以将它移动到一个函数中,并且只计算一次startAt 想法是查找所有引号,只更改在它们之前出现“H1:”的引号。

str.replace(/"/g, function(match, offset, string) {
    var startAt = string.indexOf("H1:");
    if(startAt != -1 && offset > startAt) {
        return """;
    }
    else {
        return '"';
    }
});

使用H1:不包含引号的领域知识,我们只需对整个字符串进行替换。

str.replace(/"/g, """);

将文本拆分为行,然后,对于以“H1”开头的每一行,只需执行替换。

请注意“ 如果它嵌入在HTML中,则可以用带有实际引用的JavaScript引擎替换该字符。 (编辑:当我在这个答案中直接写它时,它被替换了)。

尝试这个:

.replace(/H1:(.*?)(")(.*?)/ig, "H1:$1"$3")

*? 匹配前面标记的0或更多。 这是一个惰性匹配,在满足下一个标记之前将匹配尽可能少的字符。

这是我用来测试正则表达式的网站: http//gskinner.com/RegExr/

首先,我将字符串分成几行。 然后我只在正确的行上进行文本替换,当我进行文本替换时,我将所有行连接在一起:

<script type="text/javascript">
  // Create a test string.
var string='H1: "text here" \nH1: test "here" \nH2: not "this" one';
  // Split the string into lines
array = string.split('\n');
  // Iterate through each line, doing the replacements and 
  // concatenating everything back together
var newString = "";
for(var i = 0; i < array.length; i++) {
      // only do replacement if line starts H1
      // /m activates multiline mode so that ^ and $ are start & end of each line
    if (array[i].match(/^H1:/m) ) {
          // Change the line and concatenate
          // I used &quote; instead of &quote; so that the changes are
          // visible with document.write
        newString += array[i].replace(/"/g, '&quote;') + '\n';    
    } else {
          // only concatenate
        newString += array[i] + '\n';
    }
}
document.write(newString);
</script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM