1

这是我的代码:

if (consoles.toLowerCase().indexOf("nes")!=-1)
    document.write('<img class="icon_nes" src="/images/spacer.gif" width="1" height="1">'); 
if (consoles.toLowerCase().indexOf("snes")!=-1)
    document.write('<img class="icon_snes" src="/images/spacer.gif" width="1" height="1">'); 

当单词“nes”和/或“snes”在字符串“consoles”中时,它应该输出它们各自的图标。如果两个控制台都在字符串内,则两个图标都应该出现。

这显然不起作用,因为“nes”也包含在“snes”中。

那么,有没有办法检查“nes”前面是否有一个 S?

请记住,“nes”可能不是字符串中的第一个单词。

4

5 回答 5

3

看来你最好测试一下“nes”或“snes”是否作为一个词出现:

if (/\bnes\b/i.test(consoles)) 
  ...

if (/\bsnes\b/i.test(consoles)) 
  ...

\b在这些正则表达式中是单词边界,并且i它们不区分大小写。

现在,如果您真的想测试“nes”但前面没有“s”是否在您的字符串中,您可以使用

if (/[^s]nes/i.test(consoles))
于 2013-08-02T18:52:28.873 回答
1

检查 nes 是否在位置 0 || 控制台[索引 - 1] != 's'

于 2013-08-02T18:53:01.307 回答
0

我自己的方法是使用replace(),使用它的回调函数:

var str = "some text nes some more text snes",
    image = document.createElement('img');

str.replace(/nes/gi, function (a,b,c) {
    // a is the matched substring,
    // b is the index at which that substring was found,
    // c is the string upon which 'replace()' is operating.
    if (c.charAt(b-1).toLowerCase() == 's') {
        // found snes or SNES
        img = image.cloneNode();
        document.body.appendChild(img);
        img.src = 'http://path.to/snes-image.png';
    }
    else {
        // found nes or NES
        img = image.cloneNode();
        document.body.appendChild(img);
        img.src = 'http://path.to/nes-image.png';
    }
    return a;
});

参考:

于 2013-08-02T18:56:22.413 回答
0

"snes".match(/([^s]|^)nes/)
=> null

"nes".match(/([~s]|^)nes/) => nes

于 2013-08-02T18:56:43.437 回答
0

检查字母是否在子字符串之前的基本方法。

var index = consoles.toLowerCase().indexOf("nes");
if(index != -1 && consoles.charAt(index-1) != "s"){
    //your code here for nes
}
if(index != -1 && consoles.charAt(index-1) == "s"){
    //your code here for snes
}

注意:您应该进行检查以确保您不会将索引推送到边界之外......(以“nes”开头的字符串会导致错误)

于 2013-08-02T19:38:41.360 回答