什么是javascript中的正则表达式

时间:2012-07-16 12:45:04

标签: javascript regex

我有以下字符串

  

sssHi这是对正则表达式的测试,sr,嗨,这是对正则表达式的测试

我想只替换

  

嗨,这是正则表达式的测试

使用其他字符串进行分段。

字符串中的第一段“sss 嗨这是正则表达式的测试”不应该被替换

我为此写了以下正则表达式:

/([^.]Hi\sthis\sis\sthe\stest\sfor\sregular\sExpression)|(Hi\sthis\sis\sthe\stest\sfor\sregular\sExpression)$/

但它匹配两个细分。我想只匹配第二个,因为第一个分段以“sss”为前缀。

[^.]      
除了换行权之外,

应该匹配什么?所以小组

  "([^.]anystring)"

应该只匹配除了换行符之前没有任何chanrachter的“anystring”。 我是对的吗?

任何想法。

2 个答案:

答案 0 :(得分:3)

匹配前面有另一个字符串的字符串是negative lookbehind,JavaScript的正则表达式引擎不支持。但是,您可以使用回调来执行此操作。

鉴于

str = "sssHi this is the test for regular Expression,sr,Hi this is the test for regular Expression"

使用回调来检查str之前的字符:

str.replace(/(.)Hi this is the test for regular Expression$/g, function($0,$1){ return $1 == "s" ? $0 : $1 + "replacement"; })
// => "sssHi this is the test for regular Expression,sr,replacement"

正则表达式匹配两个字符串,因此调用回调函数两次:

  1. 随着
    • $0 = "sHi this is the test for regular Expression"
    • $1 = "s"
  2. 随着
    • $0 = ",Hi this is the test for regular Expression"
    • $1 = ","
  3. 如果$1 == "s"匹配被$0替换,则保持不变,否则将被$1 + "replacement"替换。

    另一种方法是匹配第二个字符串,即您要替换的字符串,包括分隔符。

    要匹配前面带逗号的str

    str.replace(/,Hi this is the test for regular Expression/g, ",replacement")
    // => "sssHi this is the test for regular Expression,sr,replacement"
    

    要匹配任何非单词字符前面的str

    str.replace(/(\W)Hi this is the test for regular Expression/g, "$1replacement")
    // => "sssHi this is the test for regular Expression,sr,replacement"
    

    在行尾匹配str

    str.replace(/Hi this is the test for regular Expression$/g, "replacement")
    // => "sssHi this is the test for regular Expression,sr,replacement"
    

答案 1 :(得分:0)

使用

str.replace(/(.*)Hi this is the test for regular Expression/,"$1yourstring")

。* 是贪婪的,因此匹配最长的字符串,剩下的就是你想要匹配的显式字符串。