0

我有以下字符串:

"bar foo test-line drop-line"

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

基本上有:

"bar foo new_word new_word"

我试过了:

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

但它不起作用。

4

3 回答 3

4

试试这个作为正则表达式:

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

单词 anchor 在这里不合适,因为破折号不被认为是单词的一部分,所以/\S+-line\b/会错误地匹配text-with-line-not-to-be-replaced。因此,前瞻构造。

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

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

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

(编辑:更改了前瞻结构,感谢@thg435)

于 2013-06-11T09:59:54.740 回答
0

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

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

http://www.w3schools.com/jsref/jsref_obj_regexp.asp

于 2013-06-11T10:03:51.173 回答
0

怎么样

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

\b字边界

\S非空格

正如 fge 敏锐地指出的那样,我们需要一个\bafterline所以我们不会捕捉到结尾lines liner等等等等

于 2013-06-11T10:07:32.497 回答