正则表达式使用特定字符串匹配开头的任何字符

时间:2013-06-11 09:57:04

标签: javascript regex

我有以下字符串:

"bar foo test-line drop-line"

我需要替换以任何内容开头并以'-line'结尾的单词。

基本上有:

"bar foo new_word new_word"

我试过了:

string.replace(/\.-line$/g,'new_word')

但它不起作用。

3 个答案:

答案 0 :(得分:4)

试试这个正则表达式:

/\S+-line(?![-\w])/

由于短划线不被视为单词的一部分,因此单词锚点不适用于此,因此/\S+-line\b/会错误地匹配text-with-line-not-to-be-replaced。因此,前瞻构造。

当然,根据您的使用案例,\S可能看起来有点粗糙。如果你的单词真的只包含字母然后破折号等,那么你可以使用normal* (special normal*)*模式:

/[a-z]+(-[a-z]+)*-line(?![-\w])/i

(正常:[a-z],特殊:-

(编辑:改变了前瞻构造,感谢@ thg435)

答案 1 :(得分:0)

在正则表达式中,您可以使用\ b来检测新单词的开头,并使用\ w来检测“单词字符”:

"your string".replace(/\b\w+-line\b/g,'new_word')

请参阅http://www.w3schools.com/jsref/jsref_obj_regexp.asp

答案 2 :(得分:0)

怎么样

string.replace(/\b\S+-line\b/g,'new_word')

\b字边界

\S非空白

正如fge精明地指出,我们需要在\b之后line,因此我们不会抓住结束lines liner等等的事情