我有以下字符串:
"bar foo test-line drop-line"
我需要替换以任何内容开头并以'-line'结尾的单词。
基本上有:
"bar foo new_word new_word"
我试过了:
string.replace(/\.-line$/g,'new_word')
但它不起作用。
答案 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')
答案 2 :(得分:0)
怎么样
string.replace(/\b\S+-line\b/g,'new_word')
\b
字边界
\S
非空白
正如fge精明地指出,我们需要在\b
之后line
,因此我们不会抓住结束lines
liner
等等的事情